使用JPA实体侦听器来持久化JPA实体

时间:2012-08-28 10:32:21

标签: spring activerecord jpa transactions entitylisteners

我在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抱怨约束...

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

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

  

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