web-dev-qa-db-fra.com

Le dialecte Hibernate pour Oracle Database 11g?

Existe-t-il un dialecte Hibernate pour Oracle Database 11g? Ou devrais-je utiliser le org.hibernate.dialect.Oracle10gDialect fourni avec Hibernate?

93
Landon Kuhn

Utilisez le dialecte Oracle 10g. De plus, Hibernate 3.3.2+ est requis pour les pilotes JDBC récents (la structure de classe interne a été modifiée - les symptômes seront une plainte de 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

95
MJB

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

12
darioo

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

Avec ce dialecte, Hibernate n'a pas pu trouver les séquences (à cause de l'implémentation de la méthode getQuerySequencesString(), cela retourne 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 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 retourne toutes les séquences si elles sont exécutées.

3
Simone Cinti

Au moins dans le cas d'EclipseLink 10g et 11g diffèrent. Depuis 11g, il n'est pas recommandé d'utiliser first_rows hint 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 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.

1
ibre5041

Si vous utilisez WL 10, utilisez ce qui suit:

org.hibernate.dialect.Oracle10gDialect

0
Drew1208

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

0
Manish Khalde