2

hibernateを使用して、org.hibernate.dialect.Oracle10gDialectまたはorg.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では、Hibernateが知っておくべき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();

どんな助けでも大歓迎です。


解決済み:

applicationContext.xmlが次のようになっているSpringを使用していることを忘れてしまいました。

<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のプロパティを上書きしました...

自己への注意:コピーと貼り付けを簡単に行う

4

1 に答える 1

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

また、これをチェックして、最新のOracleJDBCドライバーを使用していることを確認してください。

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

于 2012-06-19T13:32:02.097 に答える