Existe-t-il un dialecte Hibernate pour Oracle Database 11g? Ou devrais-je utiliser le org.hibernate.dialect.Oracle10gDialect
fourni avec Hibernate?
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
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
.
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.
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.
Si vous utilisez WL 10, utilisez ce qui suit:
org.hibernate.dialect.Oracle10gDialect
utilisez uniquement org.hibernate.dialect.OracleDialect Retirez 10g, 9 etc.