我可以使用Hibernate Search轻松地使用全文查询来搜索我的JPA实体:
FullTextEntityManager fullTextEntityManager =
Search.getFullTextEntityManager(this.entityManager);
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity(MyBean.class).get();
org.apache.lucene.search.Query luceneQuery = queryBuilder.keyword()
.onFields("foo", "bar").matching("needle").createQuery();
javax.persistence.Query jpaQuery = fullTextEntityManager
.createFullTextQuery(luceneQuery, MyBean.class);
List<MyBean> fulltextResult = jpaQuery.getResultList();
这很好。但是,我如何将luceneQuery
与现有的JPA查询结合使用?例如,作为用于CriteriaBuilder.where()
表达式中的谓词。我认为这是可能的,因为Hibernate Search从其索引中检索实体标识符,并最终在JPA查询中使用它们来获取结果,但我不知道是否有除getResultList()
之外的其他方法可以获得查询,例如javax.persistence.criteria.Predicate
。