簡體   English   中英

Hibernate Criteria.setMaxResults()在Oracle 11g上失敗

[英]Hibernate Criteria.setMaxResults() fails on Oracle 11g

使用hibernate通過org.hibernate.dialect.Oracle10gDialectorg.hibernate.dialect.OracleDialect從Oracle 11g DB檢索數據時,我得到以下信息:

org.hibernate.exception.SQLGrammarException: could not execute query
Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected

查看日志,我們可以看到查詢:

select top ? this_.LI_ILN as LI1_8_0_, this_.COUNTRY_CODE ... 

顯然,DB無法識別關鍵字,這就是問題所在,因為在Oracle分頁中只能使用ROWNUM來完成,這是Hibernate應該知道的。

休眠配置如下所示:

<hibernate-configuration>
<session-factory name="HibernateSessionFactory">
    <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
    <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
    <property name="hibernate.connection.password">...</property>
    <property name="hibernate.connection.url">...</property>
    <property name="hibernate.connection.username">...</property>
    <property name="hibernate.default_schema">...</property>
    <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
    <property name="hibernate.search.autoregister_listeners">false</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">validate</property>
    <property name="hibernate.transaction.auto_close_session">false</property>

    <mapping resource="HB_Mappings/Supplier.hbm.xml" />
</session-factory>

查詢是這樣完成的:

Criteria crit = sessionFactory.getCurrentSession().createCriteria(Supplier.class);
crit.setFirstResult(50 * pageIndex);
crit.setMaxResults(50);

List<Supplier> list = crit.list();

任何幫助表示贊賞。


解決了:

忘了提到我正在使用spring,其中applicationContext.xml如下所示:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:HB_Mappings/hibernate.cfg.xml</value>
    </property>
    <property name="hibernateProperties">
        <value>hibernate.dialect=org.hibernate.dialect.HSQLDialect</value>
    </property>
</bean>

它覆蓋了hibernate.cfg.xml的屬性...

自我注意:復制粘貼時要輕松

不推薦使用OracleDialect,請參見此處: http ://docs.jboss.org/hibernate/core/4.1/javadocs/org/hibernate/dialect/OracleDialect.html

改用Oracle10gDialect: http : //docs.jboss.org/hibernate/core/4.1/javadocs/org/hibernate/dialect/Oracle10gDialect.html

還要檢查一下,並確保您使用的是最新的Oracle JDBC驅動程序。

https://community.jboss.org/wiki/SupportedDatabases2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM