Pregunta

Tengo una tabla llamada grupo , que yo estoy tratando de mapear usando Hibernate para DB2 y HSQLDB . Nombre de la tabla grupo es una palabra reservada y debe ser citado en HSQLDB. Sin embargo DB2 no le gusta citado nombre de la tabla.

Así que este mapeo trabaja en HSQLDB, pero no en DB2:

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

resultados de los mapas en error en DB2 siguiente (haciendo una consulta que implica mesa Group):

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

Y esto funciona en DB2, pero no en HSQLDB:

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

resultados de los mapas en error en HSQLDB (la creación de la tabla Group) siguiente:

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

Estoy utilizando org.hibernate.dialect. DB2Dialect y org.hibernate.dialect. HSQLDialect para DB2 y HSQLDB, respectivamente.

¿Cómo puedo hacer el mismo trabajo de mapeo de las bases de datos de ambos al mismo tiempo?

¿Fue útil?

Solución

terminé haciendo create alias groups for group; en DB2 y el cambio de nombre de tabla en HSQLDB, que resolvió mi problema. Ahora mapa grupos mesa, y ya no hay este problema.

Otros consejos

El uso de acentos abiertos (como en el primer ejemplo) debería funcionar, pero hay que usarlos todas partes el nombre de la tabla se menciona.

dialecto tiene openQuote () y closeQuote () métodos que traducen los invertidas en las frases adecuadas para la base de datos dada. Aquellos defecto para comillas dobles ( ") para la mayoría de las bases de datos DB2 y entre ellos HSQL. No tengo a la mano, ya sea en este momento para probar esto, pero he tenido que trabajar para DB2 Oracle combinación / / MySQL en el pasado.

Se puede publicar un error específico y el seguimiento de pila que está recibiendo?

Todo lo dicho, si puede cambiar el nombre de la tabla a una palabra no reservada no te recomiendo que hagas -. Se ahorrará muchos dolores de cabeza en el extremo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top