首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加索引和外键约束时的H2数据库失败模式语句

问添加索引和外键约束时的H2数据库失败模式语句
EN

Stack Overflow用户
提问于 2013-06-10 13:00:14
回答 2查看 4K关注 0票数 1

H2似乎不支持hibernate为MySQL5方言使用;MODE=MYSQL和hibernate与org.hibernate.dialect.MySQL5Dialect方言一起生成的索引/FK语法。

我在这里的目标是拥有一组SQL脚本,并将hibernate用于ORM部件。在MySQL 5.5中,一切都很好,但是当我尝试使用H2进行单元测试和启动应用程序的演示版本时,我会从hibernate生成的alter语句中获得数百个失败,如下所示。不幸的是,我还没有找到一种让hibernate改变语句生成方式的方法,但这也可能是一种选择。我试过使用org.hibernate.dialect.H2Dialect,但这会产生更严重的错误,所以我不认为这会起作用。

代码语言:javascript
复制
alter table SAM_PUBLISHEDSECUREDIP_T
  add index FK1EDEA25B9482C945 (ASSESSMENTID), 
  add constraint FK1EDEA25B9482C945 foreign key (ASSESSMENTID) 
  references SAM_PUBLISHEDASSESSMENT_T (ID)

在H2中会出现这样的错误:

org.h2.jdbc.JdbcSQLException: SQL语句中的语法错误:"ALTER SAM_PUBLISHEDSECUREDIP_T add INDEX FK1EDEA25B9482C945 (ASSESSMENTID),* add约束FK1EDEA25B9482C945外键(ASSESSMENTID) REFERENCES SAM_PUBLISHEDASSESSMENT_T (ID) ";SQL语句: alter SAM_PUBLISHEDSECUREDIP_T ADD index FK1EDEA25B9482C945 (ASSESSMENTID),ADD约束FK1EDEA25B9482C945外键(ASSESSMENTID)引用SAM_PUBLISHEDASSESSMENT_T (ID) 42000-172

注意:我愿意为H2编写和提供修补程序,但我需要一些技巧,说明在代码库中应该在哪里查找。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-11 22:04:01

H2与MySQL不完全兼容,即使在使用MySQL模式时也是如此。H2似乎不支持您的一些SQL语句。

票数 4
EN

Stack Overflow用户

发布于 2013-06-10 13:22:36

创建索引不是使用alter table完成的( MySQL真的使用了这种奇怪的语法吗?)我认识的每个DBMS都使用CREATE INDEX创建索引)。

你必须把它分成两个陈述:

代码语言:javascript
复制
CREATE INDEX fk_assessment_id_index 
     on SAM_PUBLISHEDSECUREDIP_T (ASSESSMENTID);

alter table SAM_PUBLISHEDSECUREDIP_T
  add constraint FK1EDEA25B9482C945 foreign key (ASSESSMENTID) 
  references SAM_PUBLISHEDASSESSMENT_T (ID);

如果我没有弄错的话,这两条语句也应该在MySQL中起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17024482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档