#java #spring #spring-boot #hibernate #jpa
#java #весна #весенняя загрузка #спящий режим #jpa
Вопрос:
Я пытаюсь запросить данные на карте :
@Repository
public interface IUserRepository extends PagingAndSortingRepository<UserEntity, String> {
@Query("SELECT DISTINCT (u.userId, u) FROM UserEntity u WHERE userId in (:userIds)")
Map<String, UserEntity> findAllByUserIdIn(@Param("userIds") Collection<String> userIds);
Но я получаю эту ошибку:
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: {vector} [SELECT DISTINCT (u.userId, u) FROM com.telefire.device.server.users.model.UserEntity u WHERE userId in (:userIds)]
...
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: {vector} [SELECT DISTINCT (u.userId, u) FROM com.telefire.device.server.users.model.UserEntity u WHERE userId in (:userIds)]
JPA этого не допускает?
Спасибо!
Комментарии:
1. Привет, я думаю, что вы написали неправильный запрос. Может быть, попробуйте это SELECT DISTINCT u.userId, u ИЗ UserEntity u, ГДЕ userId в (:UserIds) . Другой способ — просто использовать findAllByUserIdIn без @Query и извлечь список, затем использовать java stream, чтобы сделать его отображаемым с помощью Collectors.groupingBy.
2. Привет, спасибо, но это не сработало. Я хочу сделать это без потока, но когда я извлекаю данные из БД…
3. Я понимаю, что он не может выполнять distinct для u , что подразумевало бы выполнение distinct для u.* : все поля, которые u может содержать.
4. DISTINCT является функцией одного параметра, поэтому он не может содержать char
,
. Попробуйте что-то вроде этого :SELECT DISTINCT (u.userId), u FROM UserEntity u WHERE userId in (:userIds)
. Я не уверен, что это даст вам правильный результат, как написал @MarcLeBihan в комментариях, но это устранит синтаксическую ошибку, с которой вы столкнулись.
Ответ №1:
Исключение означает неправильный синтаксис запроса.
Пожалуйста, проверьте: http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods .создание запроса
второй вариант добавить NativeQuery = true
@Query("SELECT DISTINCT (u.userId, u) FROM UserEntity u WHERE userId in (:userIds)",nativeQuery = true)
третий вариант добавить значение =:
@Query(value = "SELECT DISTINCT (u.userId, u) FROM UserEntity u WHERE userId in (:userIds)",nativeQuery = true)