使用JPA实体监听器持久化JPA实体。

3

我在一个JPA EntityListener中有以下方法:

@PostPersist
    void onPostPersist(Pli pli) {
        EvenementPli event = new EvenementPli();
        event.setPli(pli);
        event.setDateCreation(new Date());
        event.setDateEvenement(new Date());
        event.setType(TypeEvenement.creation);
        event.setMessage("Création d'un pli");
        event.persist();
    }

基本上,我正在尝试通过每次持久化 Pli 实体的实例来创建一个事件,即持久化 EvenementPli 的实例。

问题是,在调用 event.persist(); 时,Pli 行不在数据库中,这会导致 Mysql 抱怨约束...

有人可以帮助吗?

1个回答

5

适当的解决方案是重新设计应用程序,使持久化EvenementPli发生在其他实体的@PostPersist回调方法之外。根据JPA 2.0规范,在生命周期回调方法中不能保证此类操作能够正常工作:

通常,便携式应用程序的生命周期方法不应该调用EntityManager或Query操作,访问其它实体实例,或修改同一持久化上下文中的关系。


1
谢谢Mikko。我之前不知道规范的这个方面。我需要再回来看看AspectJ... - balteo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接