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