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,但这会产生更严重的错误,所以我不认为这会起作用。
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编写和提供修补程序,但我需要一些技巧,说明在代码库中应该在哪里查找。
发布于 2013-06-11 22:04:01
H2与MySQL不完全兼容,即使在使用MySQL模式时也是如此。H2似乎不支持您的一些SQL语句。
发布于 2013-06-10 13:22:36
创建索引不是使用alter table完成的( MySQL真的使用了这种奇怪的语法吗?)我认识的每个DBMS都使用CREATE INDEX创建索引)。
你必须把它分成两个陈述:
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中起作用。
https://stackoverflow.com/questions/17024482
复制相似问题