2015-11-18 2 views
0

Служба, с которой я работаю, использует JDBC API для обновления базы данных Oracle. Один из методов, который обновляет базу данных, имеет автообъект, установленный в false, чтобы выполнить 2 оператора SQL. Но даже если autocommit установлен в false, выполняется первый оператор SQL, и мы получаем ошибку нарушения ограничения целостности.Ограничения целостности, когда для параметра autocommit установлено значение false

java.sql.SQLIntegrityConstraintViolationException: ORA-02292: integrity constraint (V500.XFK3) violated - child record found 

Не следует отключать автообновление, ожидающее вызова метода фиксации? Если нет, как можно выполнить оба запроса?

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

+1

Посмотрите на [Отложенные ограничения] (http://docs.oracle.com/database/121/CNCPT/datainte.htm#CNCPT522) – JRD

ответ

4

Ограничения оцениваются по операции - не фиксация операции. Что вам нужно сделать, так это либо иметь дело с отложенными ограничениями, либо выполнять операции в правильном порядке, чтобы избежать нарушений внешнего ключа. Вставьте родителя, а затем выполните его.

для краткое введение в откладываемые ограничения и некоторые тонкие проблемы, связанные с их использованием, запустите here

я настоятельно рекомендую, однако, что отношения ограничения родитель-ребенок в базе данных, вероятно, были созданы по уважительной причине - так отключение ограничений - это плохая идея, которая приведет к плохим данным. И отложенные ограничения должны использоваться как можно реже. Вы можете думать, что это боль, чтобы найти правильный порядок операций, чтобы удовлетворить ограничения, но его правильный путь, если у вас есть UI, делает прямой DML. Честно говоря, я намного больше поклонников API PL/SQL, открытых во внешнем мире, с подробностями таблицы, скрытыми для различных причин безопасности и обслуживания. Пользовательский интерфейс должен просто сказать «сохранить этот объект данных», и интерфейс знает, как его все поместить в правильные таблицы. Таким образом, задняя часть может быть перепроектирована для повышения эффективности без необходимости использования переднего конца.

Смежные вопросы