Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 65477 invoked from network); 23 Jul 2009 20:44:32 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 23 Jul 2009 20:44:32 -0000 Received: (qmail 18144 invoked by uid 500); 23 Jul 2009 20:45:37 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 18066 invoked by uid 500); 23 Jul 2009 20:45:37 -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 18056 invoked by uid 99); 23 Jul 2009 20:45:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Jul 2009 20:45:37 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Jul 2009 20:45:35 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id C5544234C004 for ; Thu, 23 Jul 2009 13:45:14 -0700 (PDT) Message-ID: <1361857268.1248381914803.JavaMail.jira@brutus> Date: Thu, 23 Jul 2009 13:45:14 -0700 (PDT) From: "Michael Dick (JIRA)" To: dev@openjpa.apache.org Subject: [jira] Commented: (OPENJPA-1163) Data consistency issues while modifying collections. In-Reply-To: <1590610513.1247067194839.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/OPENJPA-1163?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12734774#action_12734774 ] Michael Dick commented on OPENJPA-1163: --------------------------------------- Hi Ravi, I'm sorry, I misread the test results I'd made some changes and may have changed the testcase. I believe that both times the expected result should be 10 AItems (pretend A is unversioned). The last commit contains an instance of A, which is related to 10 AItems. A has a OneToMany unidirectional relationship with AItem. Since AItem does not have a relationship with A, A is the owner of the relationship. So the last transaction to update A:id=1 wins (or at least so I thought). It's very interesting that the behavior is different when you add more changes (exceed 10). What bothers me about it is that you've updated a versioned entity (newA and result2) twice but didn't get an Optimistic Lock Exception. I'd think this is the correct behavior in this case (because A owns the relationship, it's really A that gets updated). That won't help for unversioned entities though - they'll still get the odd behavior you've found. > Data consistency issues while modifying collections. > ---------------------------------------------------- > > Key: OPENJPA-1163 > URL: https://issues.apache.org/jira/browse/OPENJPA-1163 > Project: OpenJPA > Issue Type: Bug > Components: kernel > Affects Versions: 2.0.0 > Environment: openJPA trunk. Derby DB. > Reporter: Ravi P Palacherla > Assignee: Ravi P Palacherla > Fix For: 2.0.0 > > Attachments: OPENJPA-1163_trunk.patch > > > There are data consistency issues when modifying more number of elements in a collection Vs less number of elements. > Following is a detailed explanation about the issue with example: > > - Entity A has a collection of Entities AItems with cascade ALL. > - Test case : > Clear all the data inside tables representing Entity A and AItems. > Create 3 entity managers em1,em2 and em3. > > em1.begin() > create A on em1 with id "1" > add 10 elements of AItems (id's from 0-9) to the created A(id 1). > persist A. > em1.commit() > > em1.begin() > merge A ( created in the previous step) > Remove 3 elements of AItems from the merged A. > Add 3 elements of AItems ( id's 10,11,12) to the merged A (id 1). > > With out committing em1 > > em2.begin() > query database to fetch A and construct object result2 of entity A. > Add 3 elements of AItems ( id's 13,14,15) to fetched A ( result2) > em2.commit () > em1.commit() > > em3.begin() > query database to check the size of AItems that are related to A ( id 1) > em3.commit() > > The result on em3's query for AItems related to A, returns 13 as expected. > 13 ( Initial 10 - em1's 3 + em1's 3 + em2's 3). > > When the same test case is repeated with removing and adding 10 elements instead of 3 as before then I get wrong results. > > Add initial 10 AItems (id's 0-9) for A. > commit() > > em1 will remove 10 AItems from the collection of A. > em1 will add 10 AItems (id's 10-19) to collection of A. > > em2 will add 10 AItems (id's 20-29) to collection of A. > > Commit em2. > Commit em1. > > Then instead of 20 elements ( Initial 10 - em1's 10 + em1's 10 + em2's 10), I see only 10 elements. > > The 10 elements that I see are from em1's added AItems ( id's 10-19). > I think the cause of the issue is that, when more number of elements (compared to initial element count of collection) in a collection are modified then collection tracking is disabled and openJPA tries to do the following: > -- Delete every thing from the collection > -- Insert data back to collection. > While Inserting the data back it does not consider adding the dirty records ( em2's 10 added elements ) because the collection tracking is disabled. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.