it-swarm.com.de

Hibernate-Dialekt für Oracle Database 11g?

Gibt es einen Hibernate-Dialekt für Oracle Database 11g? Oder sollte ich den mit Hibernate gelieferten org.hibernate.dialect.Oracle10gDialect verwenden?

93
Landon Kuhn

Verwenden Sie den Oracle 10g-Dialekt. Für aktuelle JDBC-Treiber ist außerdem Hibernate 3.3.2+ erforderlich (die interne Klassenstruktur wurde geändert - die Symptome werden über eine abstrakte Klasse laut).

Der Dialekt von Oracle 11g ist identisch mit 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

95
MJB

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

12
darioo

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

Mit diesem Dialekt konnte Hibernate die Sequenzen nicht finden (weil die Implementierung der getQuerySequencesString()-Methode 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.

3
Simone Cinti

Zumindest bei EclipseLink unterscheiden sich 10g und 11g. Seit 11g wird die Verwendung des first_rows-Hinweises für Paginierungsabfragen nicht empfohlen.

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.

1
ibre5041

Wenn Sie WL 10 verwenden, verwenden Sie Folgendes:

org.hibernate.dialect.Oracle10gDialect

0
Drew1208

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

0
Manish Khalde