106 votes

Dialecte Hibernate pour la base de données Oracle 11g ?

Y a-t-il un dialecte Hibernate pour la base de données Oracle 11g? Ou dois-je utiliser le org.hibernate.dialect.Oracle10gDialect fourni avec Hibernate?

116voto

MJB Points 5096

Utilisez le dialecte Oracle 10 g. Il est également nécessaire d'utiliser Hibernate 3.3.2+ pour les nouveaux pilotes JDBC (la structure de classe interne a changé - les symptômes se traduiront par des plaintes concernant une classe abstraite).

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

2 votes

Malheureusement ne résout pas le problème de "ORA-01754: une table ne peut contenir qu'une seule colonne de type LONG".

0 votes

J'ai un problème avec la fonction INTERVAL réservée spécifique... par exemple " @Formula(" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ") ". Je ne sais pas si cela pourrait générer des problèmes, mais cela semble être une bonne solution: stackoverflow.com/a/26907699/1488761

14voto

darioo Points 23903

Selon les bases de données supportées, Oracle 11g n'est pas officiellement supporté. Cependant, je crois que vous ne devriez pas avoir de problèmes en utilisant org.hibernate.dialect.OracleDialect.

18 votes

Notez que org.hibernate.dialect.OracleDialect est obsolète (docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/…). Vous devriez utiliser le dialecte Oracle 10g.

9 votes

Oracle 11 est maintenant pris en charge

8 votes

Comme l'a souligné @MJB, Oracle 11 est pris en charge. La partie manquante est : elle est prise en charge avec la classe org.hibernate.dialect.Oracle10gDialect lien (s'applique également à Hibernate 4.x).

4voto

Simone Cinti Points 41

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

Avec ce dialecte, Hibernate était incapable de trouver les séquences (en raison de l'implémentation de la méthode getQuerySequencesString() qui renvoie cette requête:

"select sequence_name from user_sequences;"

pour laquelle 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 méthode getQuerySequencesString():

"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 elle est exécutée, à la place.

2voto

Ivan Points 869

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

Voir "Est-il possible de désactiver les indices JPA par requête particulière". Une telle requête ne devrait 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.

0voto

Drew1208 Points 1743

Si vous utilisez WL 10, utilisez ce qui suit :

org.hibernate.dialect.Oracle10gDialect

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X