2

我在 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();
    }

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

麻烦的是,当时event.persist();被称为 Pli 行不在数据库中,这导致 Mysql 抱怨约束......

有人可以帮忙吗?

4

1 回答 1

4

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

通常,可移植应用程序的生命周期方法不应调用 EntityManager 或 Query 操作、访问其他实体实例或修改同一持久性上下文中的关系。

于 2012-08-28T10:42:07.553 回答