You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Alain Brazeau (JIRA)" <ji...@apache.org> on 2014/03/28 21:49:15 UTC
[jira] [Created] (OPENJPA-2486) Unecessary @PreUpdate method call
Alain Brazeau created OPENJPA-2486:
--------------------------------------
Summary: Unecessary @PreUpdate method call
Key: OPENJPA-2486
URL: https://issues.apache.org/jira/browse/OPENJPA-2486
Project: OpenJPA
Issue Type: Bug
Reporter: Alain Brazeau
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() {
this.lastModifiedDate = new Date();
}
--
This message was sent by Atlassian JIRA
(v6.2#6252)