1

我正在重写一个 Hibernate/lucene 函数findRangeSorting(),它根据权限过滤器检索表中的所有记录。现在,这是通过将 HQL(hibernate sql)字符串拼接在一起并使用它来查询数据库手动完成的(非常糟糕)。

我还有一个搜索功能,它使用更好的编程方法,通过使用 hibernate 注释为类创建过滤器并将布尔查询组合成一个全文查询,然后根据哪个用户正在执行搜索添加过滤器。(注意不是全部功能)

fullTextQuery = fullTextSession.createFullTextQuery(bq, this.type); results = tab.getQueryFiltersForSearch(fullTextQuery).setSort(sort).list();

我想将此功能用于findRangeSorting()函数,因为过滤器已经到位,所以我基本上只需要让搜索返回所有内容。缺点是搜索 "" 和 * 不能做到这一点,所以我需要创建一个FullTextQuery而不必搜索实际术语,或者可能找到一种替代方法来从表中检索一系列行基于用户权限的过滤器

我对hibernate没有最好的掌握,所以我的假设可能完全错误。任何帮助表示赞赏。

4

1 回答 1

2

要创建一个匹配所有文档的查询,您应该能够使用 Lucene 的MatchAllDocsQuery. 我不知道 HibernateQueryBuilder中创建的任何东西MatchAllDocsQuery,但是通过 Lucene API 直接创建一个非常简单,例如:

org.apache.lucene.search.Query allQuery = new org.apache.lucene.search.MatchAllDocsQuery();
fullTextQuery = fullTextSession.createFullTextQuery(allQuery, this.type); 
results = tab.getQueryFiltersForSearch(fullTextQuery).setSort(sort).list();
于 2013-11-04T16:31:13.620 回答