使用 Guice 休眠 5 个实体监听器
Hibernate 5 entity listeners with Guice
我正在使用新的 Hibernate 5 Bootstrap API 并且很高兴看到(与 previous/legacy API 相比)assemble 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);
}
});
不幸的是,这不起作用,因为 Hibernate 期望 ListenerFactory 为空(并使用默认的 ListenerFactory)或者是 BeanManager 的实例。
想知道是否有另一种方式提供我自己的 ListenerFactory?
谢谢。
那是因为 BeanManager
是为 CDI 设计的。如果您想在 CDI 之外自定义它,您需要打开 JIRA 问题来描述您的用例和您想要做什么。
或者,如果您想将依赖项注入您的实体(我觉得这很奇怪,因为它破坏了层封装),您可以只使用 LoadEventListener
来自定义创建实体的方式:
sessionFactory
.getServiceRegistry()
.getService( EventListenerRegistry.class )
.prependListeners( EventType.LOAD, new MyGuiceEntityListener() );
我正在使用新的 Hibernate 5 Bootstrap API 并且很高兴看到(与 previous/legacy API 相比)assemble 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);
}
});
不幸的是,这不起作用,因为 Hibernate 期望 ListenerFactory 为空(并使用默认的 ListenerFactory)或者是 BeanManager 的实例。
想知道是否有另一种方式提供我自己的 ListenerFactory?
谢谢。
那是因为 BeanManager
是为 CDI 设计的。如果您想在 CDI 之外自定义它,您需要打开 JIRA 问题来描述您的用例和您想要做什么。
或者,如果您想将依赖项注入您的实体(我觉得这很奇怪,因为它破坏了层封装),您可以只使用 LoadEventListener
来自定义创建实体的方式:
sessionFactory
.getServiceRegistry()
.getService( EventListenerRegistry.class )
.prependListeners( EventType.LOAD, new MyGuiceEntityListener() );