DdlUtils: отложенная вставка - PullRequest
2 голосов
/ 27 июня 2011

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

1 голос
/ 05 августа 2011

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

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

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

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

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

0 голосов
/ 27 июня 2011
INSERT INTO `RECORDSTATUS` (`NAME_ID`, RECORDSTATUS_ID`, `NAME`, `SORTVALUE`) VALUES 

должно быть:

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