رسم خرائط جدول يسمى "المجموعة" في السبات لـ DB2 و HSQLDB

StackOverflow https://stackoverflow.com/questions/1564479

سؤال

لدي طاولة تسمى مجموعة, ، أحاول أن أتعرض لاستخدام السبات لـ 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 ، على التوالي.

كيف يمكنني جعل نفس الخرائط تعمل لكلا قواعد البيانات في وقت واحد؟

هل كانت مفيدة؟

المحلول

انتهى بي الأمر create alias groups for group; في DB2 وتغيير اسم الجدول في HSQLDB ، والتي حلت مشكلتي. الآن أنا خريطة مجموعات الجدول ، ولم يعد هناك هذه المشكلة.

نصائح أخرى

يجب أن يعمل استخدام backticks (كما هو الحال في العينة الأولى) ولكن عليك استخدامها في كل مكان تم ذكر اسم الجدول.

لهجة لديها OpenQuote () و CloseQuote () الطرق التي تترجم تلك backticks إلى اقتباسات مناسبة لقاعدة البيانات المعطاة. تلك الافتراضية للمزدوجة للاقتباس (") لمعظم قواعد البيانات بما في ذلك DB2 و HSQL. ليس لدي إما في متناول اليد الآن لمحاولة ذلك ، لكنني عملت في مجموعة DB2 / Oracle / MySQL في الماضي.

هل يمكنك نشر خطأ محدد وتتبع المكدس الذي تحصل عليه؟

كل ما قيل ، إذا كنت تستطيع قم بتغيير اسم الجدول إلى كلمة غير محسوبة أوصي بشدة بأن تقوم بذلك - ستوفر لنفسك الكثير من الصداع في النهاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top