Диалект гибернации для Oracle Database 11g?


98

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

Ответы:


104

Используйте диалект 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".
Jan Goyvaerts 06

У меня проблема с конкретной зарезервированной функцией ИНТЕРВАЛ .. например, "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Я не знаю, что это может вызвать какие-то проблемы, но кажется хорошим решением: stackoverflow.com/a/26907699/1488761
Эдуардо Фабрицио,

12

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


15
Разум, который org.hibernate.dialect.OracleDialectустарел ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Вам следует использовать диалект Oracle 10g.
Yonatan

7
Oracle 11 теперь поддерживается
MJB

8
Как отметил @MJB, Oracle 11 поддерживается. Недостающая часть: она поддерживается org.hibernate.dialect.Oracle10gDialect класса ссылка (относится к hiernate 4.x тоже)
bmichalik

4

У нас возникла проблема с (устаревшим) диалектом 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;"

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


2

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


-1

используйте только org.hibernate.dialect.OracleDialect Удалите 10g, 9 и т. д.


Это также было предложено "darioo", но прочтите комментарий к его ответу от @Yonatan.
Том Брунберг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.