openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alain Brazeau (JIRA)" <j...@apache.org>
Subject [jira] [Created] (OPENJPA-2486) Unecessary @PreUpdate method call
Date Fri, 28 Mar 2014 20:49:15 GMT
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)

Mime
View raw message