hibernate.search.default.directory_provider в бинах Spring, а не в persistence.xml


У меня довольно неприятная ситуация. Мы используем компас для интеграции поиска Hibernate с Lucene и реализовали поиск в каталоге базы данных (используя 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, мы можем внедрить источник данных. Это хорошо работает с Tomcat, но не с OAS или Weblogic, поскольку мы передаем directory_provider в файле persistence.xml. Вероятно, потому что источник данных инициализируется пружиной (из-за того, как загрузчики классов работают на этих серверах приложений).

Мой вопрос заключается в том, как мы можем настроить hibernate.search.default.directory_provider непосредственно внутри bean-компонента aSpring вместо 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>

person Aneesh Vijendran    schedule 18.12.2012    source источник


Ответы (1)


Я нашел решение.

Вы можете передать свойства гибернации в spring bean как jpaProperties

<property name="jpaProperties">
    <props>
       <prop key="hibernate.search.default.directory_provider">
       uk.company.package.JdbcDirectoryProvider
     </prop>
    </props>
</property>
person Aneesh Vijendran    schedule 18.12.2012