Как работает Spring jpa @Query аннотация - PullRequest
0 голосов
/ 12 мая 2018

Я новичок в Spring data и JPA. Мне интересно, как работает аннотация запроса. Как и в моем сценарии, мне нужны все userIds организации. Вот что я сделал:

 @Query("select o.userId from User o where o.orgId = :orgId")   
 List <Integer> findUserIdsByOrgId(@Param("orgId")int orgId);

Вышеприведенное утверждение отлично работает. Я получаю список идентификаторов пользователей. Проблема в том, когда я изменяю запрос для поиска User

 @Query("select o from User o where o.orgId = :orgId")  
 List <Integer> findUserIdsByOrgId(@Param("orgId")int orgId);

Когда я удаляю userId из o.userId, возвращается весь объект, а не Integer.

Я предполагаю, что должна быть выдана ошибка, если тип возвращаемого значения не совпадает с типом в запросе.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Дело в том, что дженерики в Java удаляются во время выполнения .

Замените все параметры типа в универсальных типах их границами или объектом, если параметры типа не ограничены. Таким образом, полученный байт-код содержит только обычные классы, интерфейсы и методы.

Таким образом, Spring не может проверить универсальный тип и доверяет вам, что вы не соответствуете типу. Конечно, если вы вернете Integer вместо User (без обобщения), то Spring выдаст ошибку.

0 голосов
/ 12 мая 2018

Измените тип возврата с List<Integer> на List<User>, и он должен работать нормально.

...