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

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

@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]
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
946
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны вернуть все столбцы, необходимые для построения 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);

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

сделал как вы говорите, но ошибка осталась. Вопрос по адресу

Kaique Dias 18.01.2019 16:17

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

------------------------------
| 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>
Ответ принят как подходящий

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

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

++

Другие вопросы по теме