Есть ли диалоги Hibernate для Oracle Database 11g? Или я должен использовать org.hibernate.dialect.Oracle10gDialect
, который поставляется с Hibernate?
Диалоговое окно Hibernate для Oracle Database 11g?
Ответ 1
Используйте диалект 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
Ответ 2
Согласно поддерживаемые базы данных, Oracle 11g официально не поддерживается. Хотя, я считаю, что у вас не должно быть проблем с использованием org.hibernate.dialect.OracleDialect
.
Ответ 3
У нас была проблема с (устаревшим) диалектом 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;"
который возвращает все последовательности, если выполняется.
Ответ 4
По крайней мере, если 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;
Но могут быть и другие нюансы.
Ответ 5
Если вы используете WL 10, используйте следующее:
org.hibernate.dialect.Oracle10gDialect