我有一个JPA @Entity类,现在使用@PrePersist很长一段时间了。今天我想添加一些功能,我需要该实体的ID。此ID在数据库中由HIBERNATE_SEQUENCE持久化期间生成。通常在 em.persist(entity)之后设置。
由于某些未知原因, @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环境,包括Java v7 +,Hibernate v3.3.1.GA和Seam v2.2.2.Final ......
@PostPersist是否有隐藏的要求?
答案 0 :(得分:8)
对于其他所有人...... 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" />
我们甚至不再使用它们......它们从未被完全禁用过。
答案 1 :(得分:0)
我相信它会在提交或刷新期间被调用。你明确地打电话给其中任何一个吗?我想知道的是,从实体管理器实际持久化到数据库时可能会有一些延迟。例如,在写入响应之后(在Web应用程序中),可能不会提交事务。
另外,尝试使用记录器,从Web应用程序调用标准输出时会发生奇怪的事情。