Dialekt hibernacji dla Oracle Database 11g?


98

Czy istnieje dialekt hibernacji dla Oracle Database 11g? Czy powinienem używać tego, org.hibernate.dialect.Oracle10gDialectktóry jest dostarczany z Hibernate?

Odpowiedzi:


104

Użyj dialektu Oracle 10g. Również Hibernate 3.3.2+ jest wymagany dla najnowszych sterowników JDBC (zmieniła się wewnętrzna struktura klas - objawy będą narzekać o klasie abstrakcyjnej).

Dialekt Oracle 11g jest taki sam jak Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ). Źródło: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects


2
Niestety nie pomaga w przypadku „ORA-01754: tabela może zawierać tylko jedną kolumnę typu LONG”.
Jan Goyvaerts,

Mam problem z konkretną zarezerwowaną funkcją INTERVAL .. np. "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Nie wiem, że może to wygenerować jakiś problem, ale wydaje się, że jest to dobre rozwiązanie: stackoverflow.com/a/26907699/1488761
Eduardo Fabricio

12

Według obsługiwanych baz danych Oracle 11g nie jest oficjalnie obsługiwany. Chociaż uważam, że nie powinieneś mieć żadnych problemów z używaniem org.hibernate.dialect.OracleDialect.


15
Umysł, który org.hibernate.dialect.OracleDialectjest przestarzały ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Powinieneś używać dialektu Oracle 10g.
Yonatan,

7
Oracle 11 jest teraz obsługiwany
MJB,

8
Jak zauważył @MJB, Oracle 11 jest obsługiwany. Brakuje część: jest obsługiwana przez link do klasy org.hibernate.dialect.Oracle10gDialect (dotyczy również hiernate 4.x)
bmichalik

4

Mieliśmy problem z (przestarzałym) dialektem org.hibernate.dialect.Oracledialect i bazą danych Oracle 11g korzystającą z hibernate.hbm2ddl.auto = validate trybu.

W tym dialekcie Hibernate nie mógł znaleźć sekwencji (ponieważ implementacja getQuerySequencesString() metody, która zwraca to zapytanie:

"select sequence_name from user_sequences;"

dla którego wykonanie zwraca pusty wynik z bazy danych).

Używanie dialektu org.hibernate.dialect.Oracle9iDialect lub wyższego rozwiązuje problem z powodu innej implementacji getQuerySequencesString() metody:

"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;"

która zwraca wszystkie sekwencje, jeśli jest wykonywana, zamiast tego.


2

Przynajmniej w przypadku EclipseLink 10g i 11g różnią się. Od wersji 11g nie jest zalecane używanie wskazówki first_rows do zapytań o paginację.

Zobacz „Czy można wyłączyć podpowiedzi jpa dla konkretnego zapytania” . Takie zapytanie nie powinno być używane w 11g.

SELECT * FROM (
  SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum  FROM (
    SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
  WHERE ROWNUM <= 10 )
WHERE rnum > 0;

Ale mogą być inne niuanse.


0

Jeśli używasz WL 10, użyj:

org.hibernate.dialect.Oracle10gDialect


-1

używaj tylko org.hibernate.dialect.OracleDialect Usuń 10g, 9 itp.


Zasugerował to również "darioo", ale przeczytaj komentarz do jego odpowiedzi autorstwa @Yonatan.
Tom Brunberg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.