В настоящее время я пытаюсь использовать сгенерированные функции Hibernate для базы данных PostgreSQL. Все работает правильно, за исключением случаев, когда я использую функции setFirstResult () и setMaxResults () в моих запросах гибернации.
Вот пример моего кода Java:
String queryString = "select h from History h " ;
Query onePageQuery = getEntityManager().createQuery(queryString)
.setFirstResult(rowMin).setMaxResults(PAGE_SIZE);
onePageQuery.getResultList();
Сгенерированный запрос выглядит следующим образом:
select
*
from
( select
rownumber() over(
order by
history0_.DTMTC desc) as rownumber_,
history0_.ID as ID2_,
history0_.CCOUL as CCOUL2_,
history0_.CDIAM as CDIAM2_,
history0_.CODAV as CODAV2_,
history0_.COOPVM as COOPVM2_,
history0_.COOPVT as COOPVT2_,
history0_.CPOTA as CPOTA2_,
history0_.DTMTC as DTMTC2_,
history0_.TYCOUP as TYCOUP2_
from
F23VCM2D history0_
order by
history0_.DTMTC desc ) as temp_
where
rownumber_ <= ?
До того, как я использовал базу данных PostgreSQL, я использовал базу данных DB2. У меня есть файл jpa.xml
, в котором я заявляю, что использую базу данных POSTGRESQL следующим образом:
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="POSTGRESQL" />
<!-- <property name="database" value="DB2" /> -->
</bean>
</property>
Я думаю, что, возможно, сгенерированный запрос не адаптирован к PostgreSQL, потому что у меня ошибка: (грубо переводится с французского)
Caused by: org.postgresql.util.PSQLException: ERROR: the function rownumber() Doesn't exist
Hint : There's no function corresponding to the given name or the arguments types.
You need to add explicit type conversion.
Мои вопросы:
1) Является ли сгенерированный запрос тем, который должен быть сгенерирован? Я сомневаюсь, потому что я пытался отправить его через SQL Developper, и это не удалось.
2) Есть ли что-то очевидное, чего я не делал со своей настройкой гибернации?