我正在使用新的Hibernate 5 Bootstrap API并且很高兴看到(与之前的/遗留的API相比)可以轻松组装SessionFactory和系列。
现在,我想提供自己的ListenerFactory,它基本上将实体监听器的创建和依赖注入委托给Guice。
除了SessionFactoryBuilder的applyBeanManager之外,我找不到怎么做:
sessionFactoryBuilder.applyBeanManager(new ListenerFactory() {
@Override
public void release() {
}
@Override
public <T> Listener<T> buildListener(final Class<T> listenerClass) {
return () -> injector.getInstance(listenerClass);
}
});
不幸的是,这不起作用bc Hibernate期望ListenerFactory为null(并使用默认的ListenerFactory)或者是BeanManager的实例。
想知道是否有其他方式提供我自己的ListenerFactory?
感谢。
答案 0 :(得分:1)
那是因为BeanManager
是为CDI设计的。如果您想在CDI之外自定义它,您需要打开描述您的用例以及您想要做的事情的JIRA问题。
或者,如果你想将依赖项注入你的实体(我发现它真的很奇怪,因为它打破了层封装),你可以使用LoadEventListener
来自定义实体的创建方式:
sessionFactory
.getServiceRegistry()
.getService( EventListenerRegistry.class )
.prependListeners( EventType.LOAD, new MyGuiceEntityListener() );