DdlUtils: отложенная вставка

Для переноса БД из оракула в 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 ответа

У меня была похожая проблема при переходе с MySql на DerbyDB. В моем случае реальная проблема заключалась в том, что DDLUtils обрабатывает только те внешние ключи, которые предназначены для первичных ключей.

Таким образом, если у вас есть таблица MASTER, которая содержит какое-то уникальное поле не первичного ключа, и у вас есть таблица DETAILS, которая ссылается (внешний ключ) на это уникальное поле не первичного ключа, DDLUtils не может связать записи DETAILS с MASTER и поэтому не может вообще вставлять записи DETAIL,

Такая была ситуация в DDLUtils версии 1.0.

Я сделал несколько быстрых (и, возможно, грязных) модификаций кода, и это, похоже, решило эту проблему. Модифицированную версию можно скачать здесь (включая исходный код): http://www.arkki.fi/DdlUtils-1.0_mod_with_src.jar. Вы можете использовать его на свой страх и риск.

С наилучшими пожеланиями Кари Суракка

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

должно быть:

INSERT INTO `RECORDSTATUS` (`NAME_ID`, `RECORDSTATUS_ID`, `NAME`, `SORTVALUE`) VALUES 
Другие вопросы по тегам