我希望在运行时向会话或会话工厂添加拦截器。 我设法用事件处理程序做了类似的事情:
@Component
public class HibernateEventListenersRegisterer {
/** The post load event listener. */
@Resource
private GenericPostLoadEventListener postLoadEventListener;
/** The session factory. */
@Resource
private SessionFactory sessionFactory;
/**
* Register all event listeners.
*/
@PostConstruct
public void registerEventListeners() {
EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry()
.getService(EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.POST_LOAD).appendListener(postLoadEventListener);
}
}
我想以同样的方式使用拦截器......我可以吗?
答案 0 :(得分:0)
自己创建一个拦截器或监听器以永久添加,但您可以通过它来添加/删除委托拦截器/监听器(或以其他方式可切换地启用/或委派您的功能)。
然后,一旦你可以在运行时获得它的引用(静态单例可能是简单的方法),你可以以编程方式打开/关闭你的功能或添加/删除你的代表。
(我实际上已经做了一些与Hibernate Generators相关的事情,根据部署的数据库类型进行委托;并且它有效。)
注意:美中不足的是配置&启动;初始化事件不会轻易传递给尚未创建的委托。