我的处境相当糟糕。我们使用 compass 与 Lucene 进行 Hibernate 搜索集成,并实现了数据库目录搜索(使用JdbcDirectory)而不是 FSDirectoryProvider、RAMDirectoryProvider 等。
问题是目录提供程序是作为 META-INF/persistence.xml 中的属性传递的,如下所示:
<property name="hibernate.search.default.directory_provider" value="uk.company.package.JdbcDirectoryProvider" />
我们需要将数据库详细信息传递给 JdbcDirectoryProvider,因为JdbcDirectory需要传递数据源。
我们使用带有数据库和索引详细信息的属性文件(在类路径中)以非常规的方式构建数据源(用于目录提供程序)。
如果我们将uk.company.JdbcDirectoryProvider配置为 spring bean,我们可以注入数据源。这适用于 Tomcat,但不适用于 OAS 或 Weblogic,因为我们在 persistence.xml 中传递 directory_provider。可能是因为数据源是由 spring 初始化的(因为类加载器在这些应用程序服务器中的工作方式)。
我的问题是我们如何直接在 aSpring bean 中配置hibernate.search.default.directory_provider而不是 persistence.xml?
最近的地方是:
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
但它只需要三个属性:
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect" />
解决方案
您可以将 spring bean 中的休眠属性作为jpaProperties 传递
<property name="jpaProperties">
<props>
<prop key="hibernate.search.default.directory_provider">
uk.company.package.JdbcDirectoryProvider
</prop>
</props>
</property>