映射称为“组"的表在 Hibernate 中用于 DB2 和 HSQLDB [英] Mapping a table called "group" in Hibernate for DB2 and HSQLDB

查看:27
本文介绍了映射称为“组"的表在 Hibernate 中用于 DB2 和 HSQLDB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为 group 的表,我正在尝试使用 hibernate for DB2 和 HSQLDB 进行映射.表名group 是保留字,在HSQLDB 中必须用引号引起来.但是 DB2 不喜欢引用的表名.

所以这个映射在 HSQLDB 中有效,但在 DB2 中无效:

@Entity@Table(name="`group`")公共类组{

在 DB2 中映射导致以下错误(进行涉及 Group 表的查询):

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

这在 DB2 中有效,但在 HSQLDB 中无效:

@Entity@Table(name="组")公共类组{

映射导致 HSQLDB 出现以下错误(创建 Group 表):

<上一页>WARN hibernate.ExtendedAnnotatedSessionFactoryBean - 不成功的模式语句:创建表组(*详细信息省略*)java.sql.SQLException:意外的标记:语句中的 GROUP [创建表组]在 org.hsqldb.jdbc.Util.sqlException(未知来源)在 org.hsqldb.jdbc.jdbcStatement.fetchResult(未知来源)在 org.hsqldb.jdbc.jdbcStatement.executeUpdate(未知来源)在 org.springframework.orm.hibernate3.LocalSessionFactoryBean.executeSchemaStatement(LocalSessionFactoryBean.java:1000)在 org.springframework.orm.hibernate3.LocalSessionFactoryBean.executeSchemaScript(LocalSessionFactoryBean.java:972)在 org.springframework.orm.hibernate3.LocalSessionFactoryBean$2.doInHibernate(LocalSessionFactoryBean.java:912)在 org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)在 org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:338)在 org.springframework.orm.hibernate3.LocalSessionFactoryBean.createDatabaseSchema(LocalSessionFactoryBean.java:906)...

我正在使用 org.hibernate.dialect.DB2Dialectorg.hibernate.dialect.HSQLDialect 分别用于 DB2 和 HSQLDB.

如何使两个数据库同时使用相同的映射?

解决方案

我最终在 DB2 中执行 create alias groups for group; 并在 HSQLDB 中更改表名,这解决了我的问题.现在我映射groups表,就没有这个问题了.

I have a table called group, that I am trying to map using hibernate for DB2 and HSQLDB. Table name group is a reserved word and it must be quoted in HSQLDB. However DB2 does not like quoted table name.

So this mapping works in HSQLDB but not in DB2:

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

Mapping results in following error in DB2 (making a query that involves Group table):

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

And this works in DB2 but not in HSQLDB:

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

Mapping results in following error in HSQLDB (creating the Group table):

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

I am using org.hibernate.dialect.DB2Dialect and org.hibernate.dialect.HSQLDialect for DB2 and HSQLDB, respectively.

How can I make the same mapping work for the both databases simultaneously?

解决方案

I ended up doing create alias groups for group; in DB2 and changing table name in HSQLDB, which solved my problem. Now I map groups table, and there are no longer this problem.

这篇关于映射称为“组"的表在 Hibernate 中用于 DB2 和 HSQLDB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆