我正在重写一个Hibernate / lucene函数 findRangeSorting(),它根据权限过滤器检索表中的所有记录。现在,通过将HQL(hibernate sql)字符串拼接在一起并使用它来查询数据库,手工完成(非常糟糕)。
我还有一个搜索功能,它使用更好的编程方法,通过使用hibernate注释为类创建过滤器,并将布尔查询组合成全文查询,然后根据哪个用户进行搜索添加过滤器。 (注意,这不是整个功能)
fullTextQuery = fullTextSession.createFullTextQuery(bq, this.type);
results = tab.getQueryFiltersForSearch(fullTextQuery).setSort(sort).list();
我想将此功能用于 findRangeSorting()函数,因为过滤器已经就位,所以我基本上只需要让搜索返回所有内容。缺点是搜索""并且*没有完成这个,所以我需要基本上创建一个 FullTextQuery 而不必搜索实际的术语,或者可能找到一个替代方法来检索一系列行来自包含基于用户权限的过滤器的表。
我对hibernate没有最好的把握,所以在我的假设中我可能完全错了。任何帮助表示赞赏。
答案 0 :(得分:2)
要创建与所有文档匹配的查询,您应该只能使用Lucene的MatchAllDocsQuery
。我不知道Hibernate QueryBuilder
中创建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();