ClassBridge由MassIndexer调用并访问spring服务

时间:2013-06-05 21:44:24

标签: spring hibernate hibernate-search

我想知道是否可以在hibernate搜索ClassBridge中使用任何spring服务。

摘要:

我的实体没有我想要放入索引文档的所有信息。我也无法通过@IndexedEmbeded得到它。这些数据来自外部数据源,我有提供此服务的服务。只有在重建索引时才需要这样做。索引单个对象保存服务时会在瞬态实体字段中提供此信息。 对于reindex,我使用MassIndexer。

我的应用程序正在Spring MVC环境中工作。我使用注释驱动配置。因此,要访问我的服务,我只需使用@Autowired注释,即可使用服务。

解决方案

使用Hibernate时,生活并不那么容易(或者我不知道它是怎么回事)。

为了获得更多信息,我决定使用ClassBridge。我还实现了在我的spring服务中调用的简单MassIndexer过程。

在我的ClassBridge弹簧中没有自动装配服务。当我尝试快速解决方法并在ClassBridge中使用静态字段并从MassIndexer调用者传递服务引用时,出现了另一个问题。服务报告异常“没有会话”(sessionFactory.getCurrentSession()抛出异常)...我不知道该往哪里走。

从ClassBridge代码中访问Spring服务的推荐方法是什么?

如何从ClassBridge中获取活动的hibernate Session(或SessionFactory)?

Thanx for you time&希望你的帮助。

2 个答案:

答案 0 :(得分:0)

推荐的方法是通过编译时编织和@Configurable

答案 1 :(得分:0)

此页面上的评论(http://guylabs.ch/2014/02/22/autowiring-pring-beans-in-hibernate-jpa-entity-listeners/)提供了一种更简单的处理方法,可能会有用。你可以让Spring自动装配一个对象,更明确地通过调用:

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

Doc:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/context/support/SpringBeanAutowiringSupport.html