【问题标题】:JPA interceptor / event listener that doesn't fire with Hibernate不使用 Hibernate 触发的 JPA 拦截器/事件侦听器
【发布时间】:2011-07-07 16:11:18
【问题描述】:
@PostLoad 
public void initThing() { ... }

我将它添加到我的实体中,但它似乎在实体加载中没有被调用...

我在没有 EJB 的 spring 上下文中使用 jpa 休眠 3.2.7

我们已经在会话工厂的“entityInterceptor”中声明了一些休眠拦截器(扩展 EmptyInterceptor)

是否可以混合使用两种样式的拦截器?

是否可以在没有 EJB/EntityManager 的情况下使用 @PostLoad?

其他原因?

【问题讨论】:

    标签: java hibernate orm jpa listener


    【解决方案1】:

    我不相信 EJB 注释在没有 EJB/EntityManager 的情况下工作。

    【讨论】:

      【解决方案2】:

      对于那些感兴趣的人,我得到了 Steve Ebersole 的回复,似乎当您创建自己的休眠 SessionFactory 时,如果没有在该会话工厂中注册相应的 EventListener,就不能使用像 @PostLoad 这样的 JPA 注释...... 实际上,实体管理器系统会为您完成所有这些工作。

      所以我想我必须将 EJB3PostLoadEventListener 添加到会话工厂

      但就我而言,我必须只为我的子项目提供它,我将使用休眠拦截器,因为它们可以是会话范围的,并且还在覆盖的 spring HibernateTemplate 声明中注入了这个拦截器

      【讨论】:

      • 如果你想要 JPA 功能,为什么不首先使用 hibernate-entitymanager 呢?如果你绝对需要的话,你仍然可以使用专有的 hibernate 东西......
      • 因为我们在做一个大型项目,我不是架构师,我不能轻易地靠自己改变核心
      猜你喜欢
      • 2017-02-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 2013-05-19
      • 1970-01-01
      • 2020-09-06
      相关资源
      最近更新 更多