Чи існує діалект Hibernate для Oracle Database 11g? Або я повинен скористатися тим, org.hibernate.dialect.Oracle10gDialect
що поставляється з Hibernate?
Чи існує діалект Hibernate для Oracle Database 11g? Або я повинен скористатися тим, org.hibernate.dialect.Oracle10gDialect
що поставляється з Hibernate?
Відповіді:
Використовуйте діалект 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
Відповідно до підтримуваних баз даних , Oracle 11g офіційно не підтримується. Хоча, я вважаю, у вас не повинно виникнути проблем із використанням org.hibernate.dialect.OracleDialect
.
org.hibernate.dialect.OracleDialect
застарілий ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Слід використовувати діалект Ogr 10g.
У нас виникла проблема з (застарілим) діалектом 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;"
що повертає всі послідовності, якщо вони виконані.
Принаймні у випадку 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;
Але можуть бути й інші нюанси.
використовуйте лише org.hibernate.dialect.OracleDialect Remove 10g, 9 etc.