Java PostgreSQL和hibernate-函数rownumber()不';不存在

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

我目前正在尝试为PostgreSQL数据库使用Hibernate生成的函数。除了在hibernate查询中使用函数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,因为我的错误是:(大致翻译成法语)

我的问题是:

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>