Dialekt im Ruhezustand für Oracle Database 11g?

98

Gibt es einen Hibernate-Dialekt für Oracle Database 11g? Oder sollte ich das org.hibernate.dialect.Oracle10gDialectmit Hibernate gelieferte verwenden?

Landon Kuhn
quelle

Antworten:

104

Verwenden Sie den Oracle 10g-Dialekt. Für neuere JDBC-Treiber ist auch Hibernate 3.3.2+ erforderlich (die interne Klassenstruktur wurde geändert - die Symptome jammern über eine abstrakte Klasse).

Der Dialekt von Oracle 11g entspricht dem von Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ). Quelle: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects

MJB
quelle
2
Hilft leider nicht für "ORA-01754: Eine Tabelle darf nur eine Spalte vom Typ LONG enthalten".
Jan Goyvaerts
Ich habe ein Problem mit einer bestimmten reservierten Funktion INTERVAL .. zB "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Ich weiß nicht, ob
Eduardo Fabricio
12

Laut unterstützten Datenbanken wird Oracle 11g nicht offiziell unterstützt. Obwohl ich glaube, dass Sie keine Probleme mit der Verwendung haben sollten org.hibernate.dialect.OracleDialect.

Darioo
quelle
15
Beachten Sie, dass dies org.hibernate.dialect.OracleDialectveraltet ist ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Sie sollten den Oracle 10g-Dialekt verwenden.
Yonatan
7
Oracle 11 wird jetzt unterstützt
MJB
8
Wie @MJB hervorhob, wird Oracle 11 unterstützt. Der fehlende Teil ist: Es wird mit org.hibernate.dialect.Oracle10gDialect Klasse unterstützt Link (gilt auch auf hiernate 4.x)
bmichalik
4

Wir hatten ein Problem mit dem (veralteten) Dialekt org.hibernate.dialect.Oracledialect und der Oracle 11g-Datenbank im hibernate.hbm2ddl.auto = validate Modus.

Mit diesem Dialekt konnte Hibernate die Sequenzen nicht finden (aufgrund der Implementierung der getQuerySequencesString() Methode, die diese Abfrage zurückgibt:

"select sequence_name from user_sequences;"

für die die Ausführung ein leeres Ergebnis aus der Datenbank zurückgibt).

Die Verwendung des Dialekts org.hibernate.dialect.Oracle9iDialect oder höher löst das Problem aufgrund einer anderen Implementierung der getQuerySequencesString() Methode:

"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;"

Das gibt stattdessen alle Sequenzen zurück, wenn sie ausgeführt werden.

Simone Cinti
quelle
2

Zumindest bei EclipseLink unterscheiden sich 10g und 11g. Seit 11g wird nicht empfohlen, den Hinweis first_rows für Paginierungsabfragen zu verwenden.

Siehe "Ist es möglich, JPA-Hinweise für eine bestimmte Abfrage zu deaktivieren" . Eine solche Abfrage sollte in 11g nicht verwendet werden.

SELECT * FROM (
  SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum  FROM (
    SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
  WHERE ROWNUM <= 10 )
WHERE rnum > 0;

Es kann aber auch andere Nuancen geben.

ibre5041
quelle
0

Wenn Sie WL 10 verwenden, verwenden Sie Folgendes:

org.hibernate.dialect.Oracle10gDialect

Mike3355
quelle
-1

Verwenden Sie nur org.hibernate.dialect.OracleDialect. Entfernen Sie 10g, 9 usw.

Manish Khalde
quelle
Dies wurde auch von "darioo" vorgeschlagen, aber lesen Sie den Kommentar zu seiner Antwort von @Yonatan.
Tom Brunberg