#java #spring #hibernate #jpa
#java #весна #переход в спящий режим #jpa
Вопрос:
Я столкнулся с проблемой, из-за которой трудно найти хорошие примеры или ссылки для такого рода проблем. Я пытаюсь добавить подкачку к моему уже существующему NamedNativeQuery. Насколько я понимаю, вам нужно предоставить другой NamedNativeQuery для подкачки страниц с добавлением .count в конец имени.
Мой текущий запрос выглядит примерно так:
@NamedNativeQuery(
name="Foo.getObj",
resultSetMapping="obj",
query="SELECT item1, item2, item3, ...
FROM Table1 t1 Join Table2 t2 On t1.id = t2.id ...
WHERE t1.num = :num"
)
Это моя попытка запроса подкачки:
@NamedNativeQuery(
name="Foo.getObj.count",
resultSetMapping="obj",
query="SELECT COUNT(item1, item2, item3, ...)
FROM Table1 t1 Join Table2 t2 On t1.id = t2.id ...
WHERE t1.num = :num"
)
мой вызывающий абонент такой:
@Query(nativeQuery=true)
public List<Foo>retrieveFoo(ServiceRequest req){
return repo.retrieveFoo(@Param("num") foo.getNum(), PageRequest.of(0, req.pages)); //req.pages is never less than 1
}
Я все еще новичок в Spring, JPA и Hibernate, но я ограничен его реализацией таким образом или каким-то образом, подобным этому.
Я могу протестировать его, если Pageable является новой страницей (0, 1). Но любая сумма, превышающая 1, вызывает это исключение:
org.springframework.orm.jpa.JpaSystemException «Невозможно вызвать класс service.sources.Конструктор Foo; вложенным исключением является org.Исключение HibernateException: невозможно вызвать класс service.sources.Конструктор Foo»
Любые советы по обработке подкачки NamedNativeQueries или документации были бы полезны, похоже, я не могу найти много примеров подкачки с помощью таких запросов.
Ответ №1:
Оказывается, этот способ вызова pageable @NamedNativeQuery является правильным. Один из аргументов, возвращаемых из базы данных, был null и присваивался примитиву, когда он должен был принадлежать его варианту класса. Поэтому вместо того, чтобы присваивать ему тип Integer, я присваивал ему тип int. Это привело к сбою при поиске правильного конструктора для моего запроса. Также просто так получилось, что число, которое я пытался использовать для этого случая, имело эту нулевую переменную для этого аргумента, а другие числа — нет. После исправления замены примитива вариантом класса все работает нормально.