Dialecte Hibernate pour Oracle Database 11g?

98

Existe-t-il un dialecte Hibernate pour Oracle Database 11g? Ou devrais-je utiliser le org.hibernate.dialect.Oracle10gDialectqui est livré avec Hibernate?

Landon Kuhn
la source

Réponses:

104

Utilisez le dialecte Oracle 10g. Hibernate 3.3.2+ est également requis pour les pilotes JDBC récents (la structure de classe interne a été modifiée - les symptômes vont se plaindre d'une classe abstraite).

Le dialecte d'Oracle 11g est identique à Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ). Source: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects

MJB
la source
2
Malheureusement n'aide pas pour "ORA-01754: une table ne peut contenir qu'une seule colonne de type LONG".
Jan Goyvaerts
J'ai un problème avec la fonction réservée spécifique INTERVAL .. par exemple "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Je ne sais pas que cela pourrait générer un problème, mais semble être une bonne solution: stackoverflow.com/a/26907699/1488761
Eduardo Fabricio
12

Selon les bases de données prises en charge , Oracle 11g n'est pas officiellement pris en charge. Cependant, je pense que vous ne devriez pas avoir de problèmes d'utilisation org.hibernate.dialect.OracleDialect.

darioo
la source
15
Remarquez que org.hibernate.dialect.OracleDialectc'est obsolète ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Vous devez utiliser le dialecte Oracle 10g.
Yonatan
7
Oracle 11 est maintenant pris en charge
MJB
8
Comme @MJB l'a souligné, Oracle 11 est pris en charge. La partie manquante est: il est pris en charge avec le lien de classe org.hibernate.dialect.Oracle10gDialect (s'applique également à hiernate 4.x)
bmichalik
4

Nous avons eu un problème avec le dialecte (obsolète) org.hibernate.dialect.Oracledialect et la base de données Oracle 11g utilisant le hibernate.hbm2ddl.auto = validate mode.

Avec ce dialecte, Hibernate n'a pas pu trouver les séquences (car l'implémentation de la getQuerySequencesString() méthode, qui renvoie cette requête:

"select sequence_name from user_sequences;"

pour lequel l'exécution renvoie un résultat vide de la base de données).

L'utilisation du dialecte org.hibernate.dialect.Oracle9iDialect , ou supérieur, résout le problème, en raison d'une implémentation différente de la getQuerySequencesString() méthode:

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

qui renvoie toutes les séquences si elles sont exécutées à la place.

Simone Cinti
la source
2

Au moins dans le cas d'EclipseLink 10g et 11g diffèrent. Depuis 11g, il n'est pas recommandé d'utiliser l'indicateur first_rows pour les requêtes de pagination.

Voir "Est-il possible de désactiver les conseils jpa par requête particulière" . Une telle requête ne doit pas être utilisée dans 11g.

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

Mais il peut y avoir d'autres nuances.

ibre5041
la source
0

Si vous utilisez WL 10, utilisez les éléments suivants:

org.hibernate.dialect.Oracle10gDialect

Mike3355
la source
-1

utilisez uniquement org.hibernate.dialect.OracleDialect Remove 10g, 9 etc.

Manish Khalde
la source
Cela a également été suggéré par "darioo", mais lisez le commentaire de sa réponse par @Yonatan.
Tom Brunberg le