Alain - I looked at your unit test and the reason that an extra update is being sent to the database is because you're updating your Entity in the @PreUpdate method. If you didn't update that field, no update would be issued. That being said, I think we're getting down to the real problem.
I don't think @PreUpdate should be called in this instance because even though Parent is dirty, it doesn't result in a DB update and as such, @PreUpdate shouldn't be invoked. I thought we had a feature to control this behavior, but I'm struggling to find it right now. I'll attach my unit test for future reference. Thanks, Rick On Tue, Mar 25, 2014 at 9:22 AM, Alain Brazeau <[email protected]> wrote: > Hi Rick, > > As requested, here is a test I wrote in the 'openjpa-persistence-jdbc' > project: > > > package org.apache.openjpa.persistence.jdbc.update; > > import java.util.Date; > > import javax.persistence.EntityManager; > > import org.apache.openjpa.persistence.test.SingleEMFTestCase; > > > public class TestCascadePersist extends SingleEMFTestCase { > > public void setUp() throws Exception { > super.setUp(CLEAR_TABLES, Parent.class, Child.class); > } > > > public void testAddChildShouldNotUpdateParent() { > EntityManager em = emf.createEntityManager(); > > em.getTransaction().begin(); > Parent parent = new Parent(); > parent.setName("parent"); > em.persist(parent); > em.getTransaction().commit(); > > long parentId = parent.getId(); > Date expectedLastModifiedDate = parent.getLastModifiedDate(); > > em.getTransaction().begin(); > parent = em.find(Parent.class, parentId); > parent.newChild("child"); > em.getTransaction().commit(); > > Date actualModifiedDate = parent.getLastModifiedDate(); > > assertEquals("The last modified date should not change.", > expectedLastModifiedDate.getTime(), > actualModifiedDate.getTime()); > } > > } > > > In order for the test to work, the following instance variable and methods > have to be added to the > existing org.apache.openjpa.persistence.jdbc.update.Parent class: > > > private Date lastModifiedDate; > > public Date getLastModifiedDate() { > return lastModifiedDate; > } > > @PrePersist > @PreUpdate > public void onUpdate() { > this.lastModifiedDate = new Date(); > } > > > Thanks! > > Alain > > > > -- > View this message in context: > http://openjpa.208410.n2.nabble.com/Unecessary-database-update-tp7586121p7586153.html > Sent from the OpenJPA Users mailing list archive at Nabble.com. > -- *Rick Curtis*
