2010-12-06 12 views

Antwort

84

Verwenden Sie den Oracle 10g-Dialekt. Auch Hibernate 3.3.2+ wird für die letzten JDBC-Treiber benötigt (die interne Klassenstruktur wurde geändert - Symptome werden über eine abstrakte Klasse jammern).

Dialekt von Oracle 11g ist dasselbe wie Oracle 10g (org.hibernate.dialect.Oracle10gDialect). Quelle: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects

+2

Leider hilft das nicht für "ORA-01754: Eine Tabelle darf nur eine Spalte vom Typ LONG enthalten". –

+0

Ich habe ein Problem mit der spezifischen reservierten Funktion INTERVAL .. z. B. "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")". Ich weiß nicht, dass es ein Problem verursachen könnte, aber es scheint eine gute Lösung zu sein: http: // stackoverflow.com/a/26907699/1488761 –

10

Gemäß supported databases wird Oracle 11g nicht offiziell unterstützt. Obwohl ich glaube, dass Sie keine Probleme mit org.hibernate.dialect.OracleDialect haben sollten.

+14

Kenntnis, dass sich 'org.hibernate.dialect.OracleDialect' veraltet (http://docs.jboss.org/hibernate/ core/3.6/javadocs/org/hibernate/dialekt/OracleDialect.html). Sie sollten den Oracle 10g-Dialekt verwenden. – Yonatan

+7

Oracle 11 wird jetzt unterstützt – MJB

+8

Wie @MJB wies darauf hin, Oracle 11 wird unterstützt. Der fehlende Teil ist: Es wird unterstützt mit org.hibernate.dialect.Oracle10gDialect Klasse [link] (http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html # configuration-optional-dialects) (gilt auch für hiernate 4.x) – bmichalik

3

Wir hatten ein Problem mit dem (veralteten) Dialekt org.hibernate.dialect.Oracledialect und Oracle 11g Datenbank mit hibernate.hbm2ddl.auto = validate Modus.

Mit diesem Dialekt Hibernate konnte die Sequenzen gefunden (weil die Umsetzung des getQuerySequencesString() Methode, die diese Abfrage zurückgibt:

"select sequence_name from user_sequences;"

, für die die Ausführung ein leeres Ergebnis aus der Datenbank zurückgibt).

Verwenden des Dialekts org.hibernate.dialect.Oracle9iDialect oder größer ist, löst das Problem, aufgrund einer unterschiedlichen Implementierung getQuerySequencesString() Methode:

"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;"

, die die Sequenzen, wenn alle ausgeführt zurückkehrt, statt.

0

Wenn Sie mit 10 WL verwenden Sie die folgenden Schritte aus:

org.hibernate.dialect.Oracle10gDialect

1

zumindest im Fall von Eclipse 10g und 11g unterscheiden. Seit 11g wird nicht empfohlen, den first_rows-Hinweis für Paginierungsabfragen zu verwenden.

Siehe "Is it possible to disable jpa hints per particular query". Eine solche Abfrage sollte nicht in 11g verwendet werden.

SELECT * FROM (
    SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (
    SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a 
    WHERE ROWNUM <= 10) 
WHERE rnum > 0; 

Aber es kann andere Nuancen geben.

0

Verwendung nur org.hibernate.dialect.OracleDialect Remove 10g, 9 usw.

+0

Dies bietet keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/18711257) – diceler

+0

Dies wurde auch von "darioo" vorgeschlagen, aber lies den Kommentar zu seiner Antwort von @Yonatan. –