Here's my take :

In OpenJPA 1.x if you did something like this :

    Person p;
    tran.begin();
    em.persist(p);

    p.setName("Mike");
    tran.commit();

You would get a PrePersist, and a PreUpdate and PostUpdate callback. In
OpenJPA 1.3, and version 2.x you'll only get the PrePersist one.

-mike

On Wed, Feb 9, 2011 at 9:23 AM, Joel Halbert <[email protected]> wrote:

> What's the significance of this, from the docs?
>
> "If an entity was updated between the persist() and commit() operations
> in OpenJPA 1.x, then any PreUpdate and PostUpdate life cycle callback
> methods would be executed. Starting in OpenJPA 1.3 and 2.0, these
> callbacks will not get executed."
>
> http://openjpa.apache.org/builds/2.0.1/apache-openjpa-2.0.1/docs/manual/main.html
>
> Does it mean we should not rely on PreUpdate?
>
>
>
> On Wed, 2011-02-09 at 15:16 +0000, Joel Halbert wrote:
> > Doh!!! Thanks for clarifying.
> >
> > On Wed, 2011-02-09 at 15:13 +0000, Mark Struberg wrote:
> > > Hi Joel!
> > >
> > > You might look at @PreUpdate.
> > >
> > > @PrePersist only gets called before a em.persist() performs the sql
> INSERT statement. @PreUpdate will get called before any sql UPDATE to the
> entity.
> > >
> > > LieGrue,
> > > strub
> > >
> > > --- On Wed, 2/9/11, Joel Halbert <[email protected]> wrote:
> > >
> > > > From: Joel Halbert <[email protected]>
> > > > Subject: Does PrePersist work when merging entities? (2.0.1)
> > > > To: "[email protected]" <[email protected]>
> > > > Date: Wednesday, February 9, 2011, 3:06 PM
> > > > Hi Folks,
> > > >
> > > > Are there any known issues around using  @PrePersist
> > > > on merge with
> > > > 2.0,.1?
> > > > My Entities use Property access.
> > > >
> > > > @PostLoad method is always called when loading entities.
> > > > @PrePersist is called on persist, but never on merge.
> > > >
> > > > I'm tried using both runtime (agent) and compile time
> > > > enhancement.
> > > >
> > > > Here's a sample Entity that I used for testing this.
> > > >
> > > >
> > > >
> > > > import javax.persistence.*;
> > > >
> > > > @Entity
> > > > @Access(AccessType.PROPERTY)
> > > > @Table(name="TEST")
> > > > public class Test {
> > > >
> > > >     private int id;
> > > >     private String name;
> > > >
> > > >     @Id
> > > >     @GeneratedValue(strategy =
> > > > GenerationType.IDENTITY)
> > > >     @Column(name="ID")
> > > >     public int getId() {
> > > >         return id;
> > > >     }
> > > >     public void setId(int id) {
> > > >         this.id = id;
> > > >     }
> > > >
> > > >     @Column(name="NAME")
> > > >     public String getName() {
> > > >         return name;
> > > >     }
> > > >     public void setName(String name) {
> > > >         this.name = name;
> > > >     }
> > > >
> > > >     @PrePersist
> > > >     void populateDBFields(){
> > > >
> > > > System.out.println("Hello, I happen prePersist!");
> > > >     }
> > > >
> > > >     @PostLoad
> > > >     void populateTransientFields(){
> > > >
> > > > System.out.println("Hello, I happen postLoad!");
> > > >     }
> > > >
> > > >     public static void main(String[] args)
> > > > throws Exception {
> > > >         EntityManagerFactory
> > > > factory = Persistence.createEntityManagerFactory(
> > > >
> > > >     "su3", null);
> > > >         EntityManager em =
> > > > factory.createEntityManager();
> > > >
> > > >         // Test t = new
> > > > Test();
> > > >         //
> > > > t.setName("name");
> > > >         // em.persist(t);
> > > >
> > > >         Test t =
> > > > em.find(Test.class, 1);
> > > >         t.setName("new
> > > > name");
> > > >         em.merge(t);
> > > >
> > > >
> > > > em.getTransaction().commit();
> > > >         em.close();
> > > >
> > > >     }
> > > > }
> > > >
> > > >
> > > >
> > > >
> > > > Any clues?
> > > >
> > > > Joel
> > > >
> > >
> > >
> > >
> > >
> ____________________________________________________________________________________
> > > 8:00? 8:25? 8:40? Find a flick in no time
> > > with the Yahoo! Search movie showtime shortcut.
> > > http://tools.search.yahoo.com/shortcuts/#news
> >
> >
>
>
>

Reply via email to