DB2 および HSQLDB の Hibernate での「グループ」と呼ばれるテーブルのマッピング
-
21-09-2019 - |
質問
というテーブルがあります グループ, 、DB2 の休止状態を使用してマッピングしようとしているということと、 HSQLDB. 。テーブル名 グループ は予約語であり、HSQLDB では引用符で囲む必要があります。ただし、DB2 は引用符で囲まれたテーブル名を好みません。
したがって、このマッピングは HSQLDB では機能しますが、DB2 では機能しません。
@Entity
@Table(name="`group`")
public class Group {
マッピングにより、DB2 で次のエラーが発生します (グループ テーブルを含むクエリの作成)。
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
そして、これは DB2 では機能しますが、HSQLDB では機能しません。
@Entity
@Table(name="group")
public class Group {
マッピングにより、HSQLDB で次のエラーが発生します (グループ テーブルの作成)。
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 そして org.hibernate.dialect.HSQLDialect それぞれ DB2 と HSQLDB の場合。
両方のデータベースで同じマッピングを同時に機能させるにはどうすればよいですか?
解決
私は、DB2でcreate alias groups for group;
をやってしまったと私の問題を解決しHSQLDB、内のテーブル名を変更します。今私は、のグループのテーブルをマッピングし、この問題はもはや存在します。
他のヒント
バックティックを使用すると (最初のサンプルのように) 機能するはずですが、使用する必要があります。 どこにでも テーブル名が記載されています。
方言 もっている openQuote() そして closeQuote() これらのバッククォートを特定のデータベースに適切な引用符に変換するメソッド。DB2 や HSQL を含むほとんどのデータベースでは、デフォルトで二重引用符 (") が使用されます。現在、これを試すためのものが手元にありませんが、過去に DB2 / Oracle / MySQL の組み合わせで動作したことがあります。
特定のエラーと取得したスタック トレースを投稿していただけますか?
そうは言っても、もしあなたが できる テーブル名を予約語ではない単語に変更することを強くお勧めします。最終的には、多くの頭痛の種を避けることができます。