Спящий диалект для Oracle Database 11g?

88

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

Теги:
hibernate
oracle11g

5 ответов

81
Лучший ответ

Используйте диалект 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
    К сожалению, это не помогает для "ORA-01754: таблица может содержать только один столбец типа LONG".
  • 0
    У меня проблема с определенной зарезервированной функцией INTERVAL .. например, "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Я не знаю, может ли это вызвать какую-то проблему, но, похоже, это хорошее решение: stackoverflow.com/a/26907699/1488761
10

Согласно поддерживаемые базы данных, Oracle 11g официально не поддерживается. Хотя, я считаю, что у вас не должно быть проблем с использованием org.hibernate.dialect.OracleDialect.

  • 14
    org.hibernate.dialect.OracleDialect что org.hibernate.dialect.OracleDialect устарела ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Вы должны использовать Oracle 10g диалект.
  • 7
    Oracle 11 теперь поддерживается
Показать ещё 1 комментарий
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;"

который возвращает все последовательности, если выполняется.

1

По крайней мере, если 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;

Но могут быть и другие нюансы.

0

Если вы используете WL 10, используйте следующее:

org.hibernate.dialect.Oracle10gDialect

Ещё вопросы

Сообщество Overcoder
Наверх
Меню