Oracle Database 11g用のHibernateダイアレクトはありますか?または、Hibernateに付属のorg.hibernate.dialect.Oracle10gDialect
を使用する必要がありますか?
Oracle 10g方言を使用します。また、最近のJDBCドライバーにはHibernate 3.3.2+が必要です(内部クラス構造が変更されました-抽象クラスについて症状が現れます)。
Oracle 11gの方言はOracle 10gと同じです(org.hibernate.dialect.Oracle10gDialect)。ソース: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects
サポートされているデータベース によると、Oracle 11gは公式にはサポートされていません。ただし、org.hibernate.dialect.OracleDialect
を使用しても問題はないはずです。
(非推奨の)方言org.hibernate.dialect.Oracledialect
およびhibernate.hbm2ddl.auto = validate
モードを使用するOracle 11gデータベースに問題がありました。
この方言では、Hibernateはシーケンスを見つけることができませんでした(getQuerySequencesString()
メソッドの実装により、このクエリが返されます:
"select sequence_name from user_sequences;"
実行すると、データベースから空の結果が返されます)。
org.hibernate.dialect.Oracle9iDialect
以上の方言を使用すると、getQuerySequencesString()
メソッドの実装が異なるため、問題が解決します。
"select sequence_name from all_sequences union select synonym_name from all_synonyms us, all_sequences asq where asq.sequence_name = us.table_name and asq.sequence_owner = us.table_owner;"
代わりに、実行されるとすべてのシーケンスを返します。
少なくともEclipseLink 10gと11gの場合は異なります。 11g以降、ページネーションクエリにfirst_rowsヒントを使用することはお勧めしません。
「特定のクエリごとにjpaヒントを無効にすることはできますか」 を参照してください。このようなクエリは、11gでは使用しないでください。
SELECT * FROM (
SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (
SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
WHERE ROWNUM <= 10 )
WHERE rnum > 0;
しかし、他のニュアンスがあります。
WL 10を使用している場合は、次を使用します。
org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.OracleDialect Remove 10g、9などのみを使用します。