在持久化JPA实体上实现通用搜索

时间:2013-04-22 19:24:14

标签: hibernate java-ee jpa lucene jpql

假设我们有一个包含各种数据字段的实体Foo,其中一个是List<Bar>。反过来,Bar有各种数据字段,一个是List<Snafu>。我们希望为用户提供一个输入字段,允许他们对持久的Foo记录进行通用搜索。例如,他们搜索test并找到一个Foo记录,其中有一个Bar,其中包含一个包含字符串“test”的数据字段的Snafu。

是否有可能有效地进行此类搜索,或者是否需要使用其他技术(例如Lucene)?

2 个答案:

答案 0 :(得分:3)

是的,你应该看一下使用lucene。

hibernate-search库(由lucene提供支持)非常简单,可以在带有注释的实体上启动和运行,并且非常简单地适用于hibernate项目。

http://www.hibernate.org/subprojects/search.html

答案 1 :(得分:0)

如果仅仅找到对Foo的引用就足够了,您可以创建一个包含所有引用表中记录的数据库视图。为这样的视图编写SQL非常简单。

否则你可以看看Lucene(就像rhinds指出的那样),但这意味着你必须在其他地方复制你的数据库数据。另一方面,搜索功能会更强大(例如Lucene,与DB不同,可以轻松处理拼写错误)。