Existe-t-il un dialecte Hibernate pour Oracle Database 11g? Ou devrais-je utiliser le org.hibernate.dialect.Oracle10gDialect
qui est livré avec Hibernate?
Existe-t-il un dialecte Hibernate pour Oracle Database 11g? Ou devrais-je utiliser le org.hibernate.dialect.Oracle10gDialect
qui est livré avec Hibernate?
Réponses:
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
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
.
org.hibernate.dialect.OracleDialect
c'est obsolète ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Vous devez utiliser le dialecte Oracle 10g.
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.
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.
utilisez uniquement org.hibernate.dialect.OracleDialect Remove 10g, 9 etc.