使用 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() );