У меня довольно неприятная ситуация. Мы используем компас для интеграции поиска 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>