Hibernate 5 Поиск с Grails 3
Я использую Grails 3.1.4 и хочу использовать Hibernate-Search для полнотекстового поиска моих сущностей.
В свой build.gradle я включил Hibernate 5 и Hibernate Search
compile "org.hibernate:hibernate-core:5.0.9.Final"
compile "org.hibernate:hibernate-ehcache:5.0.9.Final"
compile "org.hibernate:hibernate-search-orm"
Если я добавлю @Indexed
к одному из классов моего домена я получаю следующую ошибку:
ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:207)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:687)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:523)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at grails.boot.GrailsApp.run(GrailsApp.groovy:55)
at grails.boot.GrailsApp.run(GrailsApp.groovy:365)
at grails.boot.GrailsApp.run(GrailsApp.groovy:354)
at grails.boot.GrailsApp$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at com.myapp.Application.main(Application.groovy:8)
Есть ли способ заставить Hibernate Search работать вместе с классами домена Grails?
3 ответа
По случайному совпадению я в настоящее время портирую старый плагин Grails 2 Hibernate Search для совместимости с Grails 3.1.x и Hibernate 5. Первоначальный автор готов объединить мой PR, как только я его создаю. Я только что закончил разработку, если вы хотите попробовать:
https://github.com/lgrignon/grails-hibernate-search-plugin
РЕДАКТИРОВАТЬ:
PR слит, я только что опубликовал на bintray, новой платформе Grails 3 для распространения плагинов. Чтобы попробовать новую версию Grails Hibernate Search 2.0 для Grails 3.1.x / GORM 5: добавьте следующий репозиторий
maven { url "http://idcapture.bintray.com/plugins" }
И добавьте следующее в ваши зависимости
compile("org.grails.plugins:hibernate-search:2.0")
он должен работать:)
Надеюсь, поможет!
Если вы используете "org.hibernate:hibernate-core:5.0.9.Final", вам необходимо получить совместимую версию Hibernate Search: "org.hibernate:hibernate-search-orm:5.5.4.Final".
Grails 3.1.4 уже включает GORM 5 Suite, это означает, что следующие строки в вашемфайле build.gradle, вероятно, являются избыточными:
compile "org.hibernate:hibernate-core:5.0.9.Final"
compile "org.hibernate:hibernate-ehcache:5.0.9.Final"
compile "org.hibernate:hibernate-search-orm"
Насколько я знаю, поиск в спящем режиме отлично работает с Grails, используя плагин поиска в Hibernate.
Но, если вы уже работаете с Grails 3.1.4, возможно, самый простой способ - использовать набор GORM (объектно-реляционное отображение Grails). GORM обеспечивает простой доступ к базе данных, делает ваш код понятным и более читабельным.