Есть ли диалект Hibernate для Oracle Database 11g? Или мне следует использовать тот, org.hibernate.dialect.Oracle10gDialect
который поставляется с Hibernate?
Есть ли диалект Hibernate для Oracle Database 11g? Или мне следует использовать тот, org.hibernate.dialect.Oracle10gDialect
который поставляется с Hibernate?
Ответы:
Используйте диалект Oracle 10g. Также для последних драйверов JDBC требуется Hibernate 3.3.2+ (изменилась внутренняя структура класса - симптомы будут ныть по поводу абстрактного класса).
Диалект Oracle 11g такой же, как Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ). Источник: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects
Согласно поддерживаемым базам данных , Oracle 11g официально не поддерживается. Хотя, я считаю, у вас не должно возникнуть проблем с использованием org.hibernate.dialect.OracleDialect
.
org.hibernate.dialect.OracleDialect
устарел ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Вам следует использовать диалект Oracle 10g.
У нас возникла проблема с (устаревшим) диалектом org.hibernate.dialect.Oracledialect
и базой данных Oracle 11g с использованием hibernate.hbm2ddl.auto = validate
режима.
С этим диалектом Hibernate не смог найти последовательности (из-за реализации getQuerySequencesString()
метода, который возвращает этот запрос:
"select sequence_name from user_sequences;"
для которого выполнение возвращает пустой результат из базы данных).
Использование диалекта org.hibernate.dialect.Oracle9iDialect
или выше решает проблему из-за другой реализации getQuerySequencesString()
метода:
"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;"
который возвращает все последовательности, если они выполнены.
По крайней мере, в случае EclipseLink 10g и 11g отличаются. Начиная с версии 11g не рекомендуется использовать подсказку first_rows для запросов нумерации страниц.
См. «Можно ли отключить подсказки jpa для конкретного запроса» . Такой запрос не следует использовать в 11g.
SELECT * FROM (
SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (
SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
WHERE ROWNUM <= 10 )
WHERE rnum > 0;
Но могут быть и другие нюансы.
используйте только org.hibernate.dialect.OracleDialect Удалите 10g, 9 и т. д.