Gibt es einen Hibernate-Dialekt für Oracle Database 11g? Oder sollte ich das org.hibernate.dialect.Oracle10gDialect
mit Hibernate gelieferte verwenden?
Gibt es einen Hibernate-Dialekt für Oracle Database 11g? Oder sollte ich das org.hibernate.dialect.Oracle10gDialect
mit Hibernate gelieferte verwenden?
Antworten:
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
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
.
org.hibernate.dialect.OracleDialect
veraltet ist ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Sie sollten den Oracle 10g-Dialekt verwenden.
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.
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.
Verwenden Sie nur org.hibernate.dialect.OracleDialect. Entfernen Sie 10g, 9 usw.