Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Guice休眠5个实体侦听器_Java_Hibernate_Orm_Hibernate 5.x_Entitylisteners - Fatal编程技术网

Java 使用Guice休眠5个实体侦听器

Java 使用Guice休眠5个实体侦听器,java,hibernate,orm,hibernate-5.x,entitylisteners,Java,Hibernate,Orm,Hibernate 5.x,Entitylisteners,我正在玩新的Hibernate 5,很高兴看到(与以前的/遗留API相比)组装SessionFactory和系列是多么容易 现在,我想提供我自己的ListenerFactory,它基本上将实体侦听器的创建和依赖项注入委托给Guice 除了SessionFactoryBuilder中的applyBeanManager外,我找不到如何执行此操作: sessionFactoryBuilder.applyBeanManager(new ListenerFactory() { @Override

我正在玩新的Hibernate 5,很高兴看到(与以前的/遗留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);
  }
});
sessionFactoryBuilder.applyBeanManager(新ListenerFactory(){
@凌驾
公开无效释放(){
}
@凌驾
公共侦听器buildListener(最终类listenerClass){
return()->injector.getInstance(listenerClass);
}
});
不幸的是,bc Hibernate期望ListenerFactory为null(并使用默认ListenerFactory)或是BeanManager的实例,但这不起作用

想知道是否有其他方法提供我自己的ListenerFactory


谢谢。

这是因为
BeanManager
是为CDI设计的。如果您想在CDI之外对其进行定制,您需要打开JIRA问题,描述您的用例和您想要做的事情

或者,如果您想将依赖项注入到实体中(我觉得这很奇怪,因为它破坏了层封装),您可以使用
LoadEventListener
自定义实体的创建方式:

sessionFactory
.getServiceRegistry()
.getService( EventListenerRegistry.class )
.prependListeners( EventType.LOAD, new MyGuiceEntityListener() );

“谢谢”将引发一个JIRA问题。