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?

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


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.


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.


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.


0

Wenn Sie WL 10 verwenden, verwenden Sie Folgendes:

org.hibernate.dialect.Oracle10gDialect


-1

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


Dies wurde auch von "darioo" vorgeschlagen, aber lesen Sie den Kommentar zu seiner Antwort von @Yonatan.
Tom Brunberg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.