Hibernate 未调用PostUpdateEventListener

Hibernate 未调用PostUpdateEventListener,hibernate,spring-data-jpa,Hibernate,Spring Data Jpa,我试图实现一些逻辑,在一个实体更新中,我需要更新另一个实体上的字段。我想在更新后的侦听器中这样做。 我的代码设置如下,但是没有调用我的onPostUpdate处理程序。我做错了什么? 在我的测试代码中,我正在调用documentRepository.save(documentEntity) (我对POST_INSERT和PostInsertEventListener尝试了相同的方法,效果很好。调用了我的处理程序) 我发现了问题。在我的测试中,我必须运行entityManager.flush(),

我试图实现一些逻辑,在一个实体更新中,我需要更新另一个实体上的字段。我想在更新后的侦听器中这样做。 我的代码设置如下,但是没有调用我的
onPostUpdate
处理程序。我做错了什么? 在我的测试代码中,我正在调用
documentRepository.save(documentEntity)

(我对POST_INSERT和PostInsertEventListener尝试了相同的方法,效果很好。调用了我的处理程序)


我发现了问题。在我的测试中,我必须运行
entityManager.flush()
,然后按预期调用所有内容。但奇怪的是,我不需要为
POST\u INSERT
这样做


@Component
public class DocumentUpdateListener implements PostUpdateEventListener {

    @Override
    public void onPostUpdate(PostUpdateEvent event) {

        ... //some business logic here
    }


    @Override
    public boolean requiresPostCommitHanding(EntityPersister persister) {
        return true;
    }

    @Override
    public boolean requiresPostCommitHandling(EntityPersister persister) {
        return true;
    }
}

@Component
public class EntityEventListenerRegistry {

    @PersistenceUnit
    private EntityManagerFactory emf;

    @Autowired
    private DocumentUpdateListener documentUpdateListener;

    @PostConstruct
    protected void init() {
        SessionFactoryImpl sessionFactory = emf.unwrap(SessionFactoryImpl.class);
        EventListenerRegistry registry = sessionFactory.getServiceRegistry().getService(EventListenerRegistry.class);
        registry.getEventListenerGroup(EventType.POST_UPDATE).appendListener(documentUpdateListener);
    }
}