使用Hibernate-Search for Complex Queries而不是Criteria API

时间:2010-11-23 11:51:51

标签: java hibernate spring criteria-api hibernate-search

在使用Wicket + Spring + JPA / Hibernate堆栈的应用程序中,我有一个收件箱/搜索页面,它应具有相当复杂的搜索功能,其中使用大量过滤选项过滤保存在数据库中的记录。到目前为止,我已经使用JPA Criteria API来构建数据库查询,但它变得非常混乱。我想知道Hibernate-Search是否适合这个,即使我不需要任何全文搜索功能,我只是觉得(从我读到的内容)生成查询可能会更容易一些?

2 个答案:

答案 0 :(得分:1)

抱歉,Hibernate Search基于Lucence。 只是其他查询语言。

Lucene不会搜索数据库中的实体,它会在Lucene索引中搜索属性。 Hibernate Search添加了将数据库中的实体连接到Lucene索引的功能。

当您需要高级全文搜索时,Hibernate Search和Lucene是创建工具。但如果你不需要它,那只是很多不合时宜的工作(和问题)。

因此,只要您不使用Lucene,Hibernate Search就无法满足您的需求。

答案 1 :(得分:0)

Hibernate Search的主要用例是全文搜索。但是,它也可用于索引/搜索简单属性/标准。编写查询的语法是否比标准查询更简单是一个品味问题。 如果您不使用全文搜索功能,则必须考虑在应用程序中添加其他步骤。搜索查询将针对Lucene索引运行,该索引将返回实体ID(除非使用投影)。然后将从数据库中提取匹配的实体。 另一方面,一旦您使用Hibernate Search,您可以通过为某些条件添加一些全文搜索功能(如果可能)来“改进”您的搜索。

无论您是否使用搜索,我认为关键是编写某种以编程方式构建查询的框架 - 搜索或标准查询。