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

Spring 使用JPA实体侦听器持久化JPA实体,spring,activerecord,jpa,transactions,entitylisteners,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()); even

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


有人能帮忙吗?

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

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


谢谢Mikko。我不知道规范的这一方面。我将不得不回到aspectJ。。。