Frage

Ich habe eine Tabelle mit dem Namen Gruppe , dass ich versuche, für DB2 mit Hibernate zur Karte und HSQLDB . Tabellenname Gruppe ist ein reserviertes Wort, und es muss in HSQLDB zitiert werden. Allerdings DB2 nicht wie angegeben Tabellennamen.

So diese Zuordnung funktioniert in HSQLDB, aber nicht in DB2:

@Entity
@Table(name="`group`")
public class Group {

Mapping führt zu folgenden Fehler in DB2 (eine Abfrage machen, die Gruppen-Tabelle beinhaltet):

Caused by: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: SCHEMA_NAME.group
    at com.ibm.db2.jcc.b.hh.c(hh.java:1662)
    at com.ibm.db2.jcc.b.hh.d(hh.java:1650)
    at com.ibm.db2.jcc.b.hh.a(hh.java:1219)
    at com.ibm.db2.jcc.c.db.g(db.java:139)
    at com.ibm.db2.jcc.c.db.a(db.java:39)
    at com.ibm.db2.jcc.c.t.a(t.java:34)
    at com.ibm.db2.jcc.c.sb.f(sb.java:142)
    at com.ibm.db2.jcc.b.hh.n(hh.java:1190)
    at com.ibm.db2.jcc.b.ih.eb(ih.java:1997)
    at com.ibm.db2.jcc.b.ih.d(ih.java:2439)
    at com.ibm.db2.jcc.b.ih.V(ih.java:492)
    at com.ibm.db2.jcc.b.ih.executeQuery(ih.java:475)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
    ... 71 more

Und das funktioniert in DB2, aber nicht in HSQLDB:

@Entity
@Table(name="group")
public class Group {

Kartierungsergebnisse in folgenden Fehler in HSQLDB (Erstellen der Gruppentabelle):

WARN hibernate.ExtendedAnnotatedSessionFactoryBean - Unsuccessful schema statement: create table group  ( *details omitted* )
java.sql.SQLException: Unexpected token: GROUP in statement [create table group]
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.jdbcStatement.executeUpdate(Unknown Source)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.executeSchemaStatement(LocalSessionFactoryBean.java:1000)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.executeSchemaScript(LocalSessionFactoryBean.java:972)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean$2.doInHibernate(LocalSessionFactoryBean.java:912)
    at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)
    at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:338)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.createDatabaseSchema(LocalSessionFactoryBean.java:906)
  ...

Ich bin mit org.hibernate.dialect. DB2Dialect und org.hibernate.dialect. HSQLDialect für DB2 und HSQLDB sind.

Wie kann ich die gleichen Kartierungsarbeiten für die beiden Datenbanken gleichzeitig machen?

War es hilfreich?

Lösung

beendete ich tun create alias groups for group; in DB2 und Ändern Tabellennamen in HSQLDB, was mein Problem gelöst. Jetzt Karte I Gruppen Tisch, und es gibt nicht mehr das Problem.

Andere Tipps

Mit Backticks (wie in der ersten Probe) sollte funktionieren, aber Sie haben sie zu nutzen überall der Tabellenname erwähnt wird.

Dialect hat openQuote () und closeQuote () Methoden, die denen übersetzen Backticks in Angebote für bestimmte Datenbank aneignen. Diejenigen, standardmäßig doppelte Anführungszeichen ( ") für die meisten Datenbanken, einschließlich DB2 und HSQL. Ich entweder auf der Hand gerade jetzt versuchen müssen, das nicht, aber ich habe es Arbeit für DB2 / Oracle / MySQL Kombination in der Vergangenheit.

Können Sie einen bestimmten Fehler posten und die Stack-Trace Sie bekommen?

Alles, was gesagt, wenn Sie können den Tabellennamen in einen nicht reservierten Wort ändern würde ich empfehlen, dass Sie das tun -. Sie finden sich am Ende eine Menge Kopfschmerzen speichern

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top