Domanda

Ho una tabella denominata gruppo , che sto cercando di mappare usando Hibernate per DB2 e HSQLDB . Nome della tabella gruppo è una parola riservata e deve essere citato in HSQLDB. Tuttavia DB2 non piace citato il nome della tabella.

Quindi, questa mappatura funziona in HSQLDB ma non in DB2:

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

risultati della mappatura in seguente errore in DB2 (facendo una query che coinvolge tavolo Gruppo):

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

E questo funziona in DB2, ma non in HSQLDB:

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

risultati della mappatura in seguente errore nel HSQLDB (creazione della tabella Gruppo):

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)
  ...

org.hibernate.dialect. DB2Dialect e org.hibernate.dialect. HSQLDialect per DB2 e HSQLDB, rispettivamente.

Come posso fare lo stesso lavoro di mappatura per i database di entrambi contemporaneamente?

È stato utile?

Soluzione

ho finito per fare create alias groups for group; in DB2 e cambiando il nome della tabella in HSQLDB, che ha risolto il mio problema. Ora io mappa gruppi tavolo, e non ci sono più questo problema.

Altri suggerimenti

Utilizzando apici inversi (come nel vostro primo campione) dovrebbe funzionare, ma bisogna usarli in tutto il mondo il nome della tabella è menzionato.

Dialetto ha openQuote () e closeQuote () metodi che traducono quelli backticks in citazioni adeguate per le varie database. Quelli di default di raddoppiare virgolette ( ") per la maggior parte dei database, tra cui DB2 e HSQL. Non ho né a portata di mano in questo momento di provare questo, ma ho avuto a lavorare per DB2 / Oracle / combinazione di MySQL in passato.

Puoi pubblicare un errore specifico e l'analisi dello stack che stai ricevendo?

Detto questo, se si possono modificare il nome della tabella a una parola non riservata vi consiglio vivamente di fare -. Potrai risparmiare un sacco di mal di testa alla fine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top