如何在多个表中搜索单词

时间:2011-10-07 16:13:43

标签: java database jsf java-ee jpa

我用一些表创建了一个Web应用程序。现在,我想在这些表中搜索。目前,我已成功创建了一个封装每个表的查询的类,例如getAllPersonsByFirstName ......等等。然后,用户可以从复选框中选择他/她想要包括在搜索中的表。如果选择了多个表,我将字符串(从inputfield获取)发送到每个方法,然后将结果合并到Set集合中。

然而,正如我所看到的那样,它的用途有限,因为如果我想对结果进行分页(每页5,10,100),我将无法知道应该限制搜索的行数。我正在使用JPA所以我知道我可以设置偏移量和最大值,但是当有多个表时,我看不出它是如何工作的。

所以我想到的是发送一个大的最终查询发送到数据库,使用较小的方法,但我不确定这是否是要走的路。 JPA中至少可以使用偏移量最大值。

可能有更好的方法可以这样做我会在如何实现分页支持方面提供一些帮助。 (使用JPA,EJB,JSF和绑定结果到数据表)

2 个答案:

答案 0 :(得分:0)

如果数据库是mysql,这里有一些提示http://forums.mysql.com/read.php?107,36833,36833

如果您有大量数据,可以使用Sphinx

答案 1 :(得分:0)

由于您使用的是EclipseLink,我建议您查看他们的Expression framework

它允许您以非常理智的方式进行编程查询。

ExpressionBuilder emp = new ExpressionBuilder();
Expression exp = emp.get("address").get("street").equal("Meadowlands");
Vector employees = session.readAllObjects(Employee.class,
               exp.and(emp.get("salary").greaterThan(10000)));

您可以将多个表达式组合成一个更大的表达式,以便一次查询多个表。您还可以在查询表达式执行时指定分页和查询限制。