为了将数据库从 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。有人遇到过同样的问题吗?有人知道问题出在哪里吗?
最佳答案
我在从 MySql 迁移到 DerbyDB 时遇到了类似的问题。我的情况是,实际问题是 DDLUtils 只处理那些针对主键的外键。
因此,如果您有包含某些唯一非主键字段的 MASTER 表,并且您有引用(外键)到该唯一非主键字段的 DETAILS 表,DDLUtils 无法将 DETAILS 记录链接到 MASTER,因此无法插入 DETAIL完全没有记录。
这是 DDLUtils 1.0 版本中的情况。
我对代码进行了一些快速的(可能是脏的)修改,它似乎解决了这个问题。修改后的版本可以在这里下载(包括源代码):DllUtils-1.0_mod_with_src.jar .您可以自行承担使用它的风险。
最好的问候 卡里苏拉卡
关于java - DdlUtils:推迟插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6492378/