Existe um dialeto do Hibernate para o Oracle Database 11g? Ou devo usar o org.hibernate.dialect.Oracle10gDialect
que vem com o Hibernate?
Existe um dialeto do Hibernate para o Oracle Database 11g? Ou devo usar o org.hibernate.dialect.Oracle10gDialect
que vem com o Hibernate?
Respostas:
Use o dialeto Oracle 10g. Além disso, o Hibernate 3.3.2+ é necessário para drivers JDBC recentes (a estrutura da classe interna mudou - os sintomas vão reclamar de uma classe abstrata).
O dialeto do Oracle 11g é igual ao do Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ). Fonte: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects
De acordo com os bancos de dados suportados , o Oracle 11g não é oficialmente compatível. Embora, eu acredite que você não deve ter problemas para usar org.hibernate.dialect.OracleDialect
.
org.hibernate.dialect.OracleDialect
está obsoleto ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Você deve usar o dialeto Oracle 10g.
Tivemos um problema com o dialeto (obsoleto) org.hibernate.dialect.Oracledialect
e o banco de dados Oracle 11g usando hibernate.hbm2ddl.auto = validate
modo.
Com este dialeto o Hibernate não conseguiu encontrar as sequências (devido a implementação do getQuerySequencesString()
método, que retorna esta consulta:
"select sequence_name from user_sequences;"
para o qual a execução retorna um resultado vazio do banco de dados).
Usar o dialeto org.hibernate.dialect.Oracle9iDialect
, ou superior, resolve o problema, devido a uma implementação diferente do getQuerySequencesString()
método:
"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;"
que retorna todas as sequências se executado, em vez disso.
Pelo menos no caso de EclipseLink 10g e 11g diferirem. Desde 11g não é recomendado usar a dica first_rows para consultas de paginação.
Consulte "É possível desabilitar dicas jpa por consulta específica" . Essa consulta não deve ser usada no 11g.
SELECT * FROM (
SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (
SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
WHERE ROWNUM <= 10 )
WHERE rnum > 0;
Mas pode haver outras nuances.
use apenas org.hibernate.dialect.OracleDialect Remove 10g, 9 etc.