我有 2 列名称:名字、姓氏 我有一个称为搜索的搜索值。我希望能够搜索全名,例如:john doe。 (带有空格)。到目前为止,我只使用名字,或者通过输入 john 或 doe 来使用姓氏。
这是我尝试的全名:
Criterion fullname = Restrictions.and(Restrictions.like("name", search).ignoreCase(),
Restrictions.like("surname", search).ignoreCase());
完整部分:
Private List<Users> getSearch(String search) {
List<Users> users = new ArrayList<Users>();
Session dbSession = HibernateUtil.getSessionFactory().getCurrentSession();
try {
Transaction tx = dbSession.beginTransaction();
Criteria cr = dbSession.createCriteria(Users.class);
Criterion name = Restrictions.or(Restrictions.like("name", search).ignoreCase(),
Restrictions.like("surname", search).ignoreCase());
Criterion fullname = Restrictions.and(Restrictions.like("name", search).ignoreCase(),
Restrictions.like("surname", search).ignoreCase());
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(name);
disjunction.add(fullname);
cr.add(disjunction);
users = (List<Users>) cr.list();
tx.commit();
} catch (HibernateException he) {
}
return users;
}
最佳答案
嗯,这并不容易实现。您有两个选择:
连接数据库中的字段并对其进行搜索。不太确定如何使用 JPA/Hibernate 来做到这一点。这是最快的方法,但您需要原始 SQL。
从数据库中选择所有名称字段,将它们连接起来并在 java 中进行匹配。
当您可以分割输入(基于空格?)并在每个字段中搜索所有输入部分时,您可能有第三种选择,但这会让您陷入各种问题:什么如果您的用户输入“John Doe”,但您输入的是“Doe,John”?如果有人希望使用她的中间名找到一个人怎么办?如果某人没有姓氏怎么办?
总结一下:从数据库中获取所有名称字段,将它们连接起来并使用 String#contains()
搜索字符串列表。
关于java - Hibernate 将值(或部分)与 2 列进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20613366/