Czy istnieje dialekt hibernacji dla Oracle Database 11g? Czy powinienem używać tego, org.hibernate.dialect.Oracle10gDialect
który jest dostarczany z Hibernate?
Czy istnieje dialekt hibernacji dla Oracle Database 11g? Czy powinienem używać tego, org.hibernate.dialect.Oracle10gDialect
który jest dostarczany z Hibernate?
Odpowiedzi:
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
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
.
org.hibernate.dialect.OracleDialect
jest przestarzały ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Powinieneś używać dialektu Oracle 10g.
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.
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.
używaj tylko org.hibernate.dialect.OracleDialect Usuń 10g, 9 itp.