Question

J'ai une table appelée groupe , que je suis en train de carte à l'aide mise en veille prolongée pour DB2 et HSQLDB . Nom de la table groupe est un mot réservé et il doit être cité dans HSQLDB. Cependant DB2 ne nom de la table cité ressemble pas.

Donc, cette application fonctionne en HSQLDB mais pas dans DB2:

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

résultats de la cartographie en erreur suivante dans DB2 (faisant une requête qui implique table de groupe):

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

Et cela fonctionne dans DB2 mais pas dans HSQLDB:

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

résultats de la cartographie en erreur suivante dans HSQLDB (création de la table de groupe):

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

J'utilise org.hibernate.dialect. DB2Dialect et org.hibernate.dialect. HSQLDialect pour DB2 et HSQLDB, respectivement.

Comment puis-je faire le même travail de cartographie pour les bases de données simultanément les deux?

Était-ce utile?

La solution

J'ai fini par faire create alias groups for group; dans DB2 et en changeant le nom de la table dans HSQLDB, qui a résolu mon problème. Maintenant, je la carte groupes table, et il n'y a plus ce problème.

Autres conseils

en utilisant les backticks (comme dans votre premier échantillon) devrait fonctionner, mais vous devez les utiliser partout le nom de la table est mentionné.

Dialect a openQuote () et closeQuote () méthodes qui se traduisent par les dans des citations appropriées contre-apostrophes pour base de données. Ceux par défaut de guillemet ( ") pour la plupart des bases de données, y compris DB2 et HSQL. Je n'ai pas soit à portée de main en ce moment pour essayer cela, mais je l'ai eu à travailler pour la combinaison DB2 / Oracle / MySQL dans le passé.

Pouvez-vous envoyer une erreur spécifique et la trace de la pile que vous obtenez?

Cela dit, si vous peut modifier le nom de la table à un mot non réservé Je recommande fortement que vous faites -. Vous vous éviterez beaucoup de maux de tête à la fin

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top