7

我有一个 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()");
    }
}

我正在使用带有 Java v7+、Hibernate v3.3.1.GA 和 Seam v2.2.2.Final 的 JBoss v4.2 环境...

@PostPersist 是否有任何隐藏的要求?

4

2 回答 2

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" />

我们甚至不再使用这些……它们只是从未被完全禁用。

于 2013-02-28T14:18:54.990 回答
0

我相信它在提交或刷新期间被调用。您是否明确调用其中任何一个?我想知道的是,从实体管理器实际持久化到数据库时可能会有一些延迟。例如,在响应被写入(在 Web 应用程序中)之前,可能不会提交事务。

此外,尝试使用记录器,从 Web 应用程序调用标准时可能会发生奇怪的事情。

于 2013-02-28T14:15:08.633 回答