Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
None
Description
When a child is added to a parent in a bidirectional one-to-many association, the parent's @PreUpdate method gets called even when the parent does not require a database update.
Here is a test I wrote in the 'openjpa-persistence-jdbc' project to demonstrate this issue:
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()