Спільний діалект для бази даних Oracle 11g?


98

Чи існує діалект Hibernate для Oracle Database 11g? Або я повинен скористатися тим, org.hibernate.dialect.Oracle10gDialectщо поставляється з Hibernate?

Відповіді:


104

Використовуйте діалект Ogr 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".
Ян Гойварц

У мене проблема з певною зарезервованою функцією INTERVAL .. напр. "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Я не знаю, що це може спричинити певну проблему, але, здається, це вдале рішення: stackoverflow.com/a/26907699/1488761
Eduardo Fabricio

12

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


15
Розум org.hibernate.dialect.OracleDialectзастарілий ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Слід використовувати діалект Ogr 10g.
Йонатан

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 відрізняються. Оскільки 11 г не рекомендується використовувати підказку first_rows для запитів про сторінки.

Див. "Чи можна відключити підказки jpa для конкретного запиту" . Такий запит не слід використовувати в 11г.

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 Remove 10g, 9 etc.


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