Hibernate:按名字搜索用户,无论firstname / lastname

时间:2015-07-30 12:01:05

标签: hibernate search

我有这个(简化的)表User,由于Hibernate绑定到POJO User.java

+---+------------+-------------+
|   | firstName  | lastName    |
+---+------------+-------------+
| 1 | John       | Doe         |
| 2 | John       | Poe         |
+---+------------+-------------+

在我的界面中,我有一个搜索字段来搜索用户,这会显示与您输入的内容相关的结果。例如,如果我在此搜索字段中输入“Jo”,则会向我显示2个结果:“John Doe”和“John Poe”。这很好用。

现在我希望这个搜索字段向我建议用户,不管我用来键入名字和姓氏的顺序。例如,如果我输入“Doe Jo”,它应该建议我“John Doe”作为结果。

这是我使用的查询:

select u from User u
where lower(concat(u.lastName,' ',u.firstName)) like lower(:typedName)
or lower(concat(u.firstName,' ',u.lastName)) like lower(:typedName)

typedName是我在搜索字段中输入的文字。此参数包含在查询中,如下所示:

query.setParameter("typedName", typedName+'%');
  • 如果我输入“Jo”,“John”或“John D”或更多,我会找到好结果
  • 如果我输入“D”或“Doe”,如果找到了好结果
  • 如果我输入“Doe J”或更多未找到任何结果

为什么最后一个输入找不到任何结果?我的查询条件的第一部分应该能够处理这个,因为第二部分能够处理“John D”,不是吗?

修改

正如评论中所述,这是我执行查询的方式:

final TypedQuery<User> query = getEntityManager()
    .createNamedQuery("my_query_name", User.class);
query.setParameter("typedName", typedName+'%');

try {
    return query.getResultList();
} catch (PersistenceException e) {
    e.printStackTrace(); // for debug purpose
}

编辑2

另请注意,生成的SQL会检索到最后一个案例的好结果

0 个答案:

没有答案