2012-06-19 2 views
2

org.hibernate.dialect.Oracle10gDialect 또는 를 사용하여 org.hibernate.dialect.OracleDialect 나는 다음을 얻을를 오라클 11g는 DB에서 데이터를 검색하는 최대 절전 모드 사용 : 로그에 보면최대 절전 모드 Criteria.setMaxResults은() 오라클 11g에서 실패

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

우리가 쿼리 볼 수는 DB 키워드를 인식하지 못하는 분명히

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

을이입니다 오라클 페이지 매김에서는 ROWNUM을 사용해야 만 할 수 있기 때문에 문제가 있습니다. 다음과 같이

최대 절전 모드 구성은 같습니다

<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(); 

어떤 도움에 감사드립니다.


는 해결 :

내가처럼 applicationContext.xml이 보이는 봄 사용하고 있다는 얘기를 깜빡 했네요 : 그것은이있는 hibernate.cfg.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> 

을 .. .

참고 사항 : 복사 붙여 넣기시 간이

답변

1

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는 또한 이것 좀 봐, 당신은 최신 오라클 JDBC 드라이버를 사용하고 있는지 확인합니다.

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

+0

감사! Spring의 applicationContext.xml에서 방언을 오버라이드하고있는 것으로 나타났습니다. :) –