首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@PostPersist ..。@PrePersist是..。为什么?

@PostPersist ..。@PrePersist是..。为什么?
EN

Stack Overflow用户
提问于 2013-02-28 14:02:09
回答 2查看 11.3K关注 0票数 7

我有一个JPA @Entity类,它使用了相当长的一段时间。今天,我想在需要实体ID的地方添加一些功能。此ID是在数据库中的HIBERNATE_SEQUENCE持久化期间生成的。通常将设置为em.persist(实体)之后。

由于一些未知的原因,触发了@PrePersist方法.而@PostPersist却从不触发:

代码语言:javascript
复制
@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。

是否有任何隐藏的要求“后持久战开火?”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-28 14:18:54

为了其他人..。Hibernate事件侦听器似乎会干扰JPA持久性事件..。从我的persistence.xml中删除以下行后,将触发@PostPersist回调。

代码语言:javascript
复制
<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" />

我们甚至不再使用这些..。他们从来没有完全残疾过。

票数 8
EN

Stack Overflow用户

发布于 2013-02-28 14:15:08

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

另外,尝试使用记录器,当调用web应用程序的标准时,会发生奇怪的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15137427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档