Ich versuche das zu tun:

@Query(value = "SELECT DISTINCT c.* FROM comarca c INNER JOIN debito_negativacao d ON d.comarca_id = c.id WHERE d.status = :status", nativeQuery = true)
List<Comarca> findDistinctComarcaByStatus(@Param("status") String status);

Aber ich bekomme diesen Fehler:

  org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.Object[]] to type [com.hc.projects.model.Comarca] for value '{9, 0, 7323}'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.math.BigInteger] to type [com.hc.projects.model.Comarca]
1
Kaique Dias 18 Jän. 2019 im 17:18

4 Antworten

Beste Antwort

Wenn Sie ein zweites Mal eine Liste von comarca_id isolieren möchten, versuchen Sie, Ihr Anforderungsergebnis zu streamen.

    List<Comarca> comarca = debitoNegativacao.stream().map(dn -> dn.getComarca()).distinct().collect(Collectors.toList());

++

0
Kaique Dias 18 Jän. 2019 im 22:43

Sie müssen alle Spalten zurückgeben, die zum Erstellen einer Comarca erforderlich sind. Sie müssen sich also dem Tisch anschließen.

Da ich die Tabellen nicht zur Verfügung gestellt habe, kann ich nur raten:

@Query(value = "SELECT DISTINCT * FROM comarca c " +
                "JOIN debito_negativacao d ON d.comarca_id = c.id "+
                "WHERE d.debito_negativacao.status= :status", nativeQuery = true)
List<Comarca> findDistinctComarcaIdByStatus(@Param("status") String status);
0
Simon Martinelli 18 Jän. 2019 im 14:24

Ihre Anfrage besagt, dass Sie eine Liste von BigInteger möchten: SELECT DISTINCT comarca_id ... weil comarca_id eine große Ganzzahl ist, denke ich. Wenn Sie eine Comarca-Liste wünschen, müssen Sie auf Ihrem gesamten Tisch anfordern.

0
Lovegiver 18 Jän. 2019 im 14:31

Wenn Sie eine eindeutige Abfrage verwenden möchten, die andere Spalten als die eindeutige zurückgibt, benötigen Sie eine Strategie zum "Zusammenführen" der Objekte. Stellen Sie sich Zeilen wie diese vor:

------------------------------
| comarca_id| key | status    |
| 1         | A   | your_state|
| 1         | B   | your_state|
| 2         | C   | your_state|
------------------------------

Was würden Sie in diesem Fall bekommen?

SELECT DISTINCT comarca_id FROM comarca; gibt 1,2 zurück

Wie können Sie jedoch zwei (oder mehr) Einträge zusammenführen, die dieselben comarca_id und status haben?

Sie haben also drei Fälle:

  1. Sie nehmen an, dass comarca_id + status eindeutig ist -> Sie benötigen die Abfrage DISTINCT nicht
  2. Möglicherweise gibt es mehr als eine Zeile mit demselben comarca_id und status -> Sie können die Abfrage nicht unterscheiden
  3. Sie möchten nur die unterschiedlichen comarca_id Werte -> lassen Sie Ihre Methode List<BigInteger> zurückgeben
0
Abaddon666 18 Jän. 2019 im 14:31