Диалоговое окно Hibernate для Oracle Database 11g?

Есть ли диалоги Hibernate для Oracle Database 11g? Или я должен использовать org.hibernate.dialect.Oracle10gDialect, который поставляется с Hibernate?

Ответ 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