Java PostgreSQL和hibernate-函数rownumber()不';不存在
我目前正在尝试为PostgreSQL数据库使用Hibernate生成的函数。除了在hibernate查询中使用函数setFirstResult()和setMaxResults()外,其他功能都正常工作 以下是我的Java代码示例:Java PostgreSQL和hibernate-函数rownumber()不';不存在,java,postgresql,hibernate,Java,Postgresql,Hibernate,我目前正在尝试为PostgreSQL数据库使用Hibernate生成的函数。除了在hibernate查询中使用函数setFirstResult()和setMaxResults()外,其他功能都正常工作 以下是我的Java代码示例: String queryString = "select h from History h " ; Query onePageQuery = getEntityManager().createQuery(queryString) .se
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,因为我的错误是:(大致翻译成法语)
我的问题是:
1) 生成的查询是应该生成的查询吗?我怀疑它,因为我试图通过SQL Developer发送它,但失败了
2) 是否有明显的事情是我在设置hibernate时没有做的 修改
jpaVendorAdapter
如下:
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
</bean>
</property>
为了正确设置hibernate方言。修改
jpaVendorAdapter
如下:
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
</bean>
</property>
为了正确设置hibernate方言。问题在我这边:有两个
jpa.xml
文件。
我不知道这一点,因为这是一个遗留项目,我试图只更改数据库连接。因此,我试图修改错误的jpa.xml
文件,以便对生成的查询没有影响
一旦我删除了“DB2”行:
并将其替换为“POSTGRE”行,在正确的文件中,它工作正常,查询成功生成。因此,以下版本的JPA适配器为我做到了这一点:
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="POSTGRESQL" />
</bean>
</property>
谢谢你的其他意见,它帮助我找到了答案。似乎不需要添加方言部分,所以最后我没有添加它 问题在我这边:有两个
jpa.xml
文件。
我不知道这一点,因为这是一个遗留项目,我试图只更改数据库连接。因此,我试图修改错误的jpa.xml
文件,以便对生成的查询没有影响
一旦我删除了“DB2”行:
并将其替换为“POSTGRE”行,在正确的文件中,它工作正常,查询成功生成。因此,以下版本的JPA适配器为我做到了这一点:
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="POSTGRESQL" />
</bean>
</property>
谢谢你的其他意见,它帮助我找到了答案。似乎不需要添加方言部分,所以最后我没有添加它 这应该是
postgresql95方言
而不是过时的8.2version@a_horse_with_no_name无论如何,我们的想法是设置方言。这应该是PostgreSQL95方言
而不是过时的8.2version@a_horse_with_no_name不管怎样,我们的想法是设定方言。
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="POSTGRESQL" />
</bean>
</property>