Каков порядок удаления JDO? - PullRequest
1 голос
/ 11 марта 2010

У меня есть две таблицы в моей базе данных оракула

Запрос и утверждение. У каждого утверждающего есть запрос. Внешний ключ защищен ограничением.

В моем коде java, использующем kodo jdo 3.4, я вызываю delete persistent на некоторых или на всех утверждающих. Затем в конце, если не осталось утверждающих, я вызываю delete persistent в Запросе. Когда я фиксирую I, мое ограничение целостности срабатывает, потому что sql работает в неправильном порядке, я думаю.

Есть ли способ заставить вызовы delete к БД происходить определенным образом?

Я также думал о том, чтобы откатить транзакцию самостоятельно в случае, когда все удаляется, и принудительно удаляет вручную в правильном порядке. Но это похоже на взлом.

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 июня 2010

Управляет ли JDO взаимосвязью (например, есть ли в поле «Запрос» поле Set и указан ли атрибут «сопоставлен» JDO), или вы явно устанавливаете внешний ключ? Если JDO знает об этой связи, он должен выполнить удаление в правильном порядке.

В качестве альтернативы, если изменение конфигурации JDO не является опцией, вы можете попробовать вызвать метод flishing () в PersistenceManager после удаления утверждающих. Это должно применить любые незавершенные удаления к хранилищу данных (хотя все еще внутри транзакции).

0 голосов
/ 11 марта 2010

Я думаю, что проблема в том, что вы удаляете Approver в одной транзакции, а Request в другой. Попробуйте совершить транзакцию, в которой вы удалили Approver s.

Второе, что вы можете сделать, это ALTER определение таблицы Request и определить его с помощью ON DELETE CASCADE, тогда вам не нужно делать все самостоятельно. Не уверен, что что-то, какое-то требование мешает вам действовать таким образом.

...