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>