DdlUtils:延迟插入

时间:2011-06-27 11:49:02

标签: java mysql oracle ddlutils

为了将数据库从oracle迁移到mysql,我正在使用ddlutils。迁移模式适用于我的目的,但由于缺少行而插入数据失败。以下日志文​​件摘录说明了这一点:

[ddlToDatabase] About to execute SQL: INSERT INTO `RECORDSTATUS` (`NAME_ID`, RECORDSTATUS_ID`, `NAME`, `SORTVALUE`) VALUES (?, ?, ?, ?)
[ddlToDatabase] Inserted bean RECORDSTATUS:RECORDSTATUS_ID=0
...
[ddlToDatabase] Defering insertion of row NAME:LANGUAGE_ID=0;NAME_ID=5941 because it is waiting for:
[ddlToDatabase]   RECORDSTATUS:RECORDSTATUS_ID=0

在数据库中,有一行RECORDSTATUS_ID = 0。有没有人面临同样的问题?有人有想法,问题是什么?

2 个答案:

答案 0 :(得分:1)

从MySql迁移到DerbyDB时遇到了类似的问题。我的情况实际问题是DDLUtils只处理那些针对主键的外键。

因此,如果您的MASTER表包含一些唯一的非主键字段,并且您有DETAILS表引用(外键)到该唯一的非主键字段,则DDLUtils无法将DETAILS记录链接到MASTER,因此无法插入DETAIL记录。

这是DDLUtils 1.0版中的情况。

我对代码做了一些快速(并且可能很脏)修改,它似乎解决了这个问题。修改后的版本可以在这里下载(包括来源):DllUtils-1.0_mod_with_src.jar。您可以自担风险使用它。

祝你好运   Kari Surakka

答案 1 :(得分:0)

INSERT INTO `RECORDSTATUS` (`NAME_ID`, RECORDSTATUS_ID`, `NAME`, `SORTVALUE`) VALUES 

应该是:

INSERT INTO `RECORDSTATUS` (`NAME_ID`, `RECORDSTATUS_ID`, `NAME`, `SORTVALUE`) VALUES