spring - 如何注册hibernate spring实体监听器

标签 spring hibernate configuration entity listener

我已经构建了一个实体监听器,但尚未弄清楚如何注册它以便调用它。这一切都运行了,我在调试器中验证了 注册代码在启动时执行(显然成功)。但调试器永远不会停止在监听器代码中。

这是我的听众:

public class DirtyAwareListener implements PostLoadEventListener
{
   @Override
   public void onPostLoad(PostLoadEvent postLoadEvent)
   {
      if (postLoadEvent.getEntity() instanceof DirtyAware)
      {
         ((DirtyAware)postLoadEvent.getEntity()).commitFields();
      }
   }
}

这是注册组件:

@Component
public class HibernateListenerConfigurer
{
   @PersistenceUnit
   private EntityManagerFactory emf;

   @Autowired
   private SessionFactory sessionFactory;

   @PostConstruct
   protected void init()
   {
      DirtyAwareListener listener = new DirtyAwareListener();
//      SessionFactoryImpl sessionFactory = emf.unwrap(SessionFactoryImpl.class);
      EventListenerRegistry registry = ((SessionFactoryImpl)sessionFactory).getServiceRegistry().getService(EventListenerRegistry.class);
      registry.getEventListenerGroup(EventType.POST_LOAD).appendListener(listener);
   }
}

下面是我的一般 Hibernate 配置代码如何生成 session 工厂:

    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
    sessionFactory.setDataSource(getDataSource());
    sessionFactory.setPackagesToScan("com.my.entities");
    sessionFactory.setHibernateProperties(getHibernateProperties());
    sessionFactory.setEntityInterceptor(new DirtyAwareInterceptor());
    return sessionFactory;

请注意,拦截器确实按预期工作(但不幸的是没有我需要的钩子(Hook)。)

最佳答案

要添加实体监听器,请实现org.hibernate.integrator.spi.Integrator。参见示例https://www.boraji.com/hibernate-5-event-listener-example

关于spring - 如何注册hibernate spring实体监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48393322/

相关文章:

spring - 在Hibernate实体中使用aspectj

hibernate - 更新二级缓存而不是失效

java - informix临时表的唯一ID是什么?

java - 我想知道如何从另一个应用程序获取使用 Spring Security 保护的 Web 服务 RES 的内容

java - 我正在尝试创建一个简单的 hibernate 应用程序。它给出以下错误。如何解决该错误

.net - 如何在自定义 configSection 中指定集合

properties - Gradle/Groovy 属性

c# - log4net配置问题

java - Spring JPA 没有正在进行的事务

java - 如何使用Spring Boot并行执行SQL查询?