Dialeto do Hibernate para Oracle Database 11g?


98

Existe um dialeto do Hibernate para o Oracle Database 11g? Ou devo usar o org.hibernate.dialect.Oracle10gDialectque vem com o Hibernate?

Respostas:


104

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


2
Infelizmente não ajuda para "ORA-01754: uma tabela pode conter apenas uma coluna do tipo LONG".
Jan Goyvaerts

Tenho um problema com a função reservada específica INTERVAL .. por exemplo, "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Não sei se pode gerar algum problema, mas parece ser uma boa solução: stackoverflow.com/a/26907699/1488761
Eduardo Fabricio

12

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.


15
Lembre-se de que org.hibernate.dialect.OracleDialectestá obsoleto ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Você deve usar o dialeto Oracle 10g.
Yonatan

7
Oracle 11 agora é compatível
MJB

8
Como @MJB apontou, o Oracle 11 é compatível. A parte que falta é: ele é compatível com o link da classe org.hibernate.dialect.Oracle10gDialect (aplica-se ao hiernate 4.x também)
bmichalik

4

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.


2

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.


0

Se você estiver usando WL 10, use o seguinte:

org.hibernate.dialect.Oracle10gDialect


-1

use apenas org.hibernate.dialect.OracleDialect Remove 10g, 9 etc.


Isso foi sugerido também por "darioo", mas leia o comentário à sua resposta por @Yonatan.
Tom Brunberg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.