0


我的处境相当糟糕。我们使用 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>
4

1 回答 1

0

我找到了解决方案。

您可以将 spring bean 中的休眠属性作为 jpaProperties 传递

<property name="jpaProperties">
    <props>
       <prop key="hibernate.search.default.directory_provider">
       uk.company.package.JdbcDirectoryProvider
     </prop>
    </props>
</property>
于 2012-12-18T22:58:12.127 回答