Как вернуть запрос на выборку из репозитория jpa с типом внешнего ключа - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь сделать это:

@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);

Но я получаю эту ошибку:

  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]

Ответы [ 4 ]

0 голосов
/ 18 января 2019

Если во второй раз вы хотите изолировать список comarca_id, попробуйте отправить ваш запрос в потоковом режиме.

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

++

0 голосов
/ 18 января 2019

Ваш запрос говорит, что вы хотите получить список BigInteger: SELECT DISTINCT comarca_id ... потому что comarca_id - это большой интегратор. Если вы хотите список Comarca, вы должны запросить все ваши таблицы.

0 голосов
/ 18 января 2019

Если вы хотите использовать отдельный запрос, который будет возвращать другие столбцы, кроме отдельного, вам нужна какая-то стратегия, как «объединить» объекты. Представьте себе строки, подобные этой:

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

Что бы вы получили в этом случае?

SELECT DISTINCT comarca_id FROM comarca; вернется 1,2

Однако, как вы можете объединить две (или более) записи, которые имеют одинаковые comarca_id и status?

Это оставляет вам три случая:

  1. вы предполагаете, что comarca_id + status уникален -> вам не нужен DISTINCT запрос
  2. Может быть несколько строк с одинаковыми comarca_id и status -> вы не можете сделать запрос отличным
  3. вам нужны только отдельные comarca_id значения -> заставить ваш метод возвращать List<BigInteger>
0 голосов
/ 18 января 2019

Вы должны вернуть все столбцы, необходимые для построения Comarca. Так что вам придется присоединиться к столу.

Поскольку таблицы не предоставлены, я могу только догадываться:

@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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...