@PostPersist is not called ... @PrePersist is ... why?

I have a JPA @Entity class that has been using @PrePersist for quite some time. Today I wanted to add some features where I need the identifier of this object. This identifier is created when HIBERNATE_SEQUENCE is stored in the database. It is usually installed after em.persist (entity).

For some unknown reason, the @PrePersist method starts ... until @PostPersist just fires:

@Entity public class MyEntity { @PrePersist protected void onCreate() { System.out.println("ExtendedEntity.onCreate()"); } @PostPersist protected void afterCreate() { System.out.println("ExtendedEntity.afterCreate()"); } } 

I am using JBoss v4.2 with Java v7 +, Hibernate v3.3.1.GA and Seam v2.2.2.Final ...

Are there any hidden requirements to run @PostPersist?

+6
java hibernate jpa
source share
2 answers

For everyone else ... Hibernate event listeners seem to interfere with JPA duration persistence events ... after removing the following lines from my persistence.xml , the @PostPersist callback is triggered.

 <property name="hibernate.ejb.event.pre-insert" value="my.hibernate.events.listeners.Listener" /> <property name="hibernate.ejb.event.pre-update" value="my.hibernate.events.listeners.Listener" /> <property name="hibernate.ejb.event.pre-delete" value="my.hibernate.events.listeners.Listener" /> <property name="hibernate.ejb.event.post-insert" value="my.hibernate.events.listeners.Listener" /> <property name="hibernate.ejb.event.post-update" value="my.hibernate.events.listeners.Listener" /> <property name="hibernate.ejb.event.post-delete" value="my.hibernate.events.listeners.Listener" /> 

We don’t even use them anymore ... they simply were never completely disconnected.

+8
source share

I believe that it is called during a commit or flush. Do you explicitly call it? I am wondering, maybe there is some delay from the moment when the object manager is actually stored in the database. For example, transactions may not be executed until a response is written (in web applications).

In addition, try using a registrar; strange things may occur when calling a standard one from web applications.

0
source share

All Articles