【问题标题】:Persisting additional Entities in @PostPersist in Hibernate在 Hibernate 中持久化 @PostPersist 中的其他实体
【发布时间】:2026-01-25 02:45:01
【问题描述】:

我正在尝试在域类的 @PostPersit 方法中保留其他实体。

由于@PostPersist 方法在域类上,我无权访问任何服务类/entityManager - 为了解决这个问题,我正在使用 ApplicationService(单例),它具有自动装配的服务类:

@PostPersist
    public void createNotification() {
        Notification n = new Notification();
        n.setActivity(this);
        ApplicationService.getInstance().sendNotifications(n);
    }

ApplicationService 方法只是调用 Autowired 服务类中的一个方法:

public void sendNotifications(Notification n) {
        notificationService.distributeNotifications(n);
    }

服务类是标准的spring注解服务类,具有创建和持久化新对象的事务方法

@Transactional
public void distributeNotifications(Long accountId, Notification n) {
    this.createNotification(n);
    ...
}

但是,额外的实体永远不会被持久化 - 任何人都可以告诉我上面哪里出了问题吗?我是否误解了 hibernate 中的事务边界?

谢谢。

【问题讨论】:

    标签: java hibernate spring persistence


    【解决方案1】:

    原因可能在于您自己创建了单例?不应该是 spring 创建实例以便它解释 @Transactional 注释吗?

    【讨论】:

    • 抱歉,这有点误导 - 它仍然是一个 spring 托管类并实现 Springs ApplicationContextsAware 接口(或多或少在前两个分析器中描述:*.com/questions/129207/…)getInstance() 方法使用获取spring bean的静态应用上下文