使用Hibernate Search的Spring Boot找不到org.hibernate.query.ParameterMetadata

Jon*_*aas 1 lucene hibernate-search spring-data-jpa spring-boot

我有一个使用Hibernate Search的相当简单的Spring Boot 1.5.2应用程序。JPA的东西很好用。

运行以下搜索时,我得到原因: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();
Run Code Online (Sandbox Code Playgroud)

Hibernate Core 5.0.12是通过Spring Boot引入的,但是该类不存在。

据此: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的任何其他包中找到该类,但是它存在于类路径上的许多其他包中。

是问题

javax.persistence.Query
Run Code Online (Sandbox Code Playgroud)

如果是这样,该怎么用呢?还是其他地方的问题?

yro*_*ere 5

Hibernate Search 5.7.0.Final 仅与Hibernate ORM 5.2.3.Final及更高版本兼容。您应该:

  • 将Hibernate搜索降级为 5.6.1.Final
  • 或将Hibernate ORM升级到版本5.2.3.Final或更高版本。借助Spring Boot,恐怕您将不得不使用Spring Boot的不稳定版本,即2.0.0.BUILD-SNAPSHOT

编辑:实际上,看来您可以在Spring Boot 1.5中使用Hibernate ORM 5.2+;看到这个例子。不过,请谨慎使用5.2.3.Final或稍后使用(该示例使用5.2.0.Final,将无法使用)。


顺便说一句,org.hibernate.query由于OSGi支持,您提供的链接仅被提及,这可能与您无关。碰巧hibernate-search-orm(将Hibernate Search集成到Hibernate ORM的模块)同时导入和重新导出了org.hibernate.query程序包,但它本身并未提供程序包。