Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 37949 invoked from network); 20 Jun 2007 17:45:06 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 20 Jun 2007 17:45:05 -0000 Received: (qmail 57121 invoked by uid 500); 20 Jun 2007 17:44:52 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 57058 invoked by uid 500); 20 Jun 2007 17:44:51 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 56978 invoked by uid 99); 20 Jun 2007 17:44:51 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 Jun 2007 10:44:51 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 Jun 2007 10:44:46 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 44802714191 for ; Wed, 20 Jun 2007 10:44:26 -0700 (PDT) Message-ID: <14395853.1182361466277.JavaMail.jira@brutus> Date: Wed, 20 Jun 2007 10:44:26 -0700 (PDT) From: "Reece Garrett (JIRA)" To: dev@openjpa.apache.org Subject: [jira] Commented: (OPENJPA-235) SQL reordering to avoid non-nullable foreign key constraint violations MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/OPENJPA-235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12506611 ] Reece Garrett commented on OPENJPA-235: --------------------------------------- Kevin, The patch which Patrick submitted is not a complete solution, however, it seems to work quite well for foreign key constraints. I'm not certain what you mean by "complete", but the test cases I submitted exercise the code in such a way that a foreign key constraint violation should occur if ordering is not done properly. Markus is in the process of implementing the changes he outlined a few posts back so we're waiting for him to contribute his code. Kevan, Revision 544918 is not my code and to be honest I haven't had a chance to look at it in depth. I did write the test cases that were committed and they all pass; perhaps there are scenarios I failed to address. Without knowing the specifics of the exceptions it's hard to say what the problem could be. Please let us know when you determine the exact cause. I am definitely interested in gaining access to your tck infrastructure. As I said earlier, I work for a government organization so signing the NDA presents certain legal issues. -Reece > SQL reordering to avoid non-nullable foreign key constraint violations > ---------------------------------------------------------------------- > > Key: OPENJPA-235 > URL: https://issues.apache.org/jira/browse/OPENJPA-235 > Project: OpenJPA > Issue Type: Improvement > Components: kernel > Reporter: Reece Garrett > Assignee: Patrick Linskey > Fix For: 0.9.8 > > Attachments: merge-detached.patch, merge-multigen-collection-testcase.zip, openjpa-235-test.jar, openjpa-235-test1.jar, openjpa-235-test2.zip, sqlreorder.patch, sqlReorder2.patch, sqlReorderTests.patch > > > OpenJPA does not do any SQL statement re-ordering in order to resolve foreign key constraints. Instead, objects are always inserted in the order in which the user persists the instances. When you persist in an order that would violate foreign key constraints, OpenJPA attempts to insert null and then update the foreign key value in a separate statement. If you use non-nullable constraints, though, you must persist your objects in the correct order. > This improvement re-orders SQL statements as follows: > 1. First, all insert statements execute. Inserts which have foreign keys with non-nullable constraints execute AFTER the foreign keys which they depend on have been inserted since no deferred update is possible. > 2. Next, all update statements execute. No reordering is necessary. > 3. Finally, all delete statements execute. Like inserts, deletes execute in an order which does not violate non-nullable foreign key constraints. > If a circular foreign key reference is found during the re-ordering process then re-ordering halts and the remaining unordered statements are left as is. There is nothing that can be done about the circular reference (other than fixing the schema) and the resulting SQL statements will not succeed. > The net effect is that users do not need to worry about the persistence order of their objects regardless of non-nullable foreign key constraints. The only class modified was org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager. I have included a patch which includes my modifications to OperationOrderUpdateManager and test cases. The test cases I have provided fail on the current trunk but pass with my modifications. I have also verified that I did not break anything by using maven to run all test cases with my modifications in place. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.