我有一个JPA @Entity类,它使用了相当长的一段时间。今天,我想在需要实体ID的地方添加一些功能。此ID是在数据库中的HIBERNATE_SEQUENCE持久化期间生成的。通常将设置为em.persist(实体)之后。
由于一些未知的原因,触发了@PrePersist方法.而@PostPersist却从不触发:
@Entity
public class MyEntity {
@PrePersist
protected void onCreate() {
System.out.println("ExtendedEntity.onCreate()");
}
@PostPersist
protected void afterCreate() {
System.out.println("ExtendedEntity.afterCreate()");
}
}我使用的是JBoss v4.2环境和v7+,Hibernate v3.3.1.GA和Seam v2.2.2。
是否有任何隐藏的要求“后持久战开火?”
发布于 2013-02-28 14:18:54
为了其他人..。Hibernate事件侦听器似乎会干扰JPA持久性事件..。从我的persistence.xml中删除以下行后,将触发@PostPersist回调。
<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" />我们甚至不再使用这些..。他们从来没有完全残疾过。
发布于 2013-02-28 14:15:08
我相信它是在提交或刷新时调用的。您是否显式地调用了其中任何一个?我想知道的是,从实体管理器实际持久化到数据库时,可能会有一些延迟。例如,在响应被写入之后(在web应用程序中),事务可能不会被提交。
另外,尝试使用记录器,当调用web应用程序的标准时,会发生奇怪的事情。
https://stackoverflow.com/questions/15137427
复制相似问题