Oracle Database 11gのHibernateダイアレクト?


98

Oracle Database 11gのHibernateダイアレクトはありますか?またはorg.hibernate.dialect.Oracle10gDialect、Hibernateに同梱されているを使用する必要がありますか?

回答:


104

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


2
残念ながら、「ORA-01754:テーブルにはLONG​​タイプの列が1つだけ含まれている可能性があります」には役立ちません。
Jan Goyvaerts 2013年

特定の予約済み関数INTERVALに問題があります。例: "@Formula(" SYSDATE-INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")"。問題が発生する可能性があることはわかりませんが、良い解決策のようです:stackoverflow.com/a/26907699/1488761
Eduardo Fabricio '14

12

サポートされているデータベースによると、Oracle 11gは公式にはサポートされていません。ただし、の使用には問題はないと思いますorg.hibernate.dialect.OracleDialect


15
org.hibernate.dialect.OracleDialect推奨されないことに注意してくださいdocs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/…)。Oracle 10g方言を使用する必要があります。
よなたん2012年

7
Oracle 11がサポートされるようになりました
MJB 2012

8
@MJBが指摘したように、Oracle 11がサポートされています。不足している部分は、org.hibernate.dialect.Oracle10gDialectクラスリンクでサポートされています(hiernate 4.xにも適用されます)
bmichalik

4

(非推奨)方言org.hibernate.dialect.Oracledialect とOracle 11gデータベースの使用 hibernate.hbm2ddl.auto = validate モードに問題がありました。

この方言では、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;"

代わりに、実行するとすべてのシーケンスが返されます。


2

少なくとも、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;

しかし、他のニュアンスがある可能性があります。


0

WL 10を使用している場合は、以下を使用します。

org.hibernate.dialect.Oracle10gDialect


-1

org.hibernate.dialect.OracleDialectのみを使用してください10g、9などを削除してください。


これは「darioo」によっても提案されましたが、@ Yonatanによる彼の回答へのコメントを読んでください。
トムブランバーグ2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.