Spring 使用 Hibernate 搜索启动找不到 org.hibernate.query.ParameterMetadata
Spring Boot with Hibernate Search can't find org.hibernate.query.ParameterMetadata
我有一个相当直接的 Spring Boot 1.5.2 应用程序使用 Hibernate Search。 JPA 的东西工作得很好。
我得到 Caused by: java.lang.ClassNotFoundException: org.hibernate.query.ParameterMetadata 当 运行 进行搜索时。
代码看起来有点像这样。以前在 Wildfly 中 运行,但我正在迁移到 Spring Boot。
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(Customer.class)
.get();
org.apache.lucene.search.Query
luceneQuery = qb.keyword()
.wildcard()
.onField("primaryParty.firstName")
.andField("primaryParty.sureName")
.andField("customerNumber")
.matching(query.trim() + "*")
.createQuery();
javax.persistence.Query jpaQuery =
fullTextEntityManager.createFullTextQuery(luceneQuery, Customer.class);
List<Customer> result = jpaQuery.getResultList();
Hibernate Core 5.0.12 是通过 Spring 引导引入的,但是 class 不存在。
据此:https://cia.sourceforge.io/tattleTaleReport/jar/hibernate-search-orm-5.7.0.Final.jar.html
我应该会在 hibernate-search-orm 5.7 中找到它。0.Final。但据我所知,这个 jar 只包含 org.hibernate.search 包,没有 org.hibernate.query 包。在该 jar 中的任何其他包中也找不到 class,但它存在于 class 路径上的许多其他包中。
是问题
javax.persistence.Query
如果可以,用什么代替?还是其他地方的问题?
休眠搜索 5.7.0.Final
is only compatible with Hibernate ORM 5.2.3.Final
and later。
您应该:
- 将 Hibernate 搜索降级为
5.6.1.Final
- 或将 Hibernate ORM 升级到版本
5.2.3.Final
或更高版本。使用 Spring 引导,恐怕您将不得不使用不稳定版本的 Spring 引导,即 2.0.0.BUILD-SNAPSHOT
编辑:实际上,您似乎可以将 Hibernate ORM 5.2+ 与 Spring Boot 1.5 一起使用;参见 this sample。不过,请小心使用 5.2.3.Final
或更高版本(示例使用 5.2.0.Final
,这是行不通的)。
顺便说一句,您提供的 link 仅提及 org.hibernate.query
因为 OSGi 支持,这可能与您无关。碰巧 hibernate-search-orm
(将 Hibernate Search 集成到 Hibernate ORM 的模块)同时导入和重新导出 org.hibernate.query
包,但它自己不提供。
由于使用 5.7.0.Final jar,我遇到了同样的问题,但它不兼容。此问题已通过更改降级 jar 版本得到解决。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>5.6.1.Final</version>
我有一个相当直接的 Spring Boot 1.5.2 应用程序使用 Hibernate Search。 JPA 的东西工作得很好。
我得到 Caused by: java.lang.ClassNotFoundException: org.hibernate.query.ParameterMetadata 当 运行 进行搜索时。
代码看起来有点像这样。以前在 Wildfly 中 运行,但我正在迁移到 Spring Boot。
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(Customer.class)
.get();
org.apache.lucene.search.Query
luceneQuery = qb.keyword()
.wildcard()
.onField("primaryParty.firstName")
.andField("primaryParty.sureName")
.andField("customerNumber")
.matching(query.trim() + "*")
.createQuery();
javax.persistence.Query jpaQuery =
fullTextEntityManager.createFullTextQuery(luceneQuery, Customer.class);
List<Customer> result = jpaQuery.getResultList();
Hibernate Core 5.0.12 是通过 Spring 引导引入的,但是 class 不存在。
据此:https://cia.sourceforge.io/tattleTaleReport/jar/hibernate-search-orm-5.7.0.Final.jar.html
我应该会在 hibernate-search-orm 5.7 中找到它。0.Final。但据我所知,这个 jar 只包含 org.hibernate.search 包,没有 org.hibernate.query 包。在该 jar 中的任何其他包中也找不到 class,但它存在于 class 路径上的许多其他包中。
是问题
javax.persistence.Query
如果可以,用什么代替?还是其他地方的问题?
休眠搜索 5.7.0.Final
is only compatible with Hibernate ORM 5.2.3.Final
and later。
您应该:
- 将 Hibernate 搜索降级为
5.6.1.Final
- 或将 Hibernate ORM 升级到版本
5.2.3.Final
或更高版本。使用 Spring 引导,恐怕您将不得不使用不稳定版本的 Spring 引导,即2.0.0.BUILD-SNAPSHOT
编辑:实际上,您似乎可以将 Hibernate ORM 5.2+ 与 Spring Boot 1.5 一起使用;参见 this sample。不过,请小心使用 5.2.3.Final
或更高版本(示例使用 5.2.0.Final
,这是行不通的)。
顺便说一句,您提供的 link 仅提及 org.hibernate.query
因为 OSGi 支持,这可能与您无关。碰巧 hibernate-search-orm
(将 Hibernate Search 集成到 Hibernate ORM 的模块)同时导入和重新导出 org.hibernate.query
包,但它自己不提供。
由于使用 5.7.0.Final jar,我遇到了同样的问题,但它不兼容。此问题已通过更改降级 jar 版本得到解决。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>5.6.1.Final</version>