【问题标题】:Hibernate comparing value(or parts of) to 2 columns休眠将值(或部分)与 2 列进行比较
【发布时间】:2014-01-03 23:42:54
【问题描述】:

我有 2 列名称:姓名、姓氏 我有一个名为 search 的搜索值。我希望能够搜索全名,例如: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;
        }

【问题讨论】:

  • 请分享完整的标准代码。
  • 澄清一下:您希望您的用户在键入“John D”、“John”、“Doe”时能够搜索并找到相同的“John Doe”?他们可以用空格以外的任何东西来分隔名称部分吗?
  • 现在他们可以通过输入 john 或 doe 找到用户,我希望他们能够通过输入 john doe 找到用户。不只是空白会做。

标签: java hibernate servlets criteria restrictions


【解决方案1】:

嗯,这并不容易。你有两个选择:

  1. 连接数据库中的字段并对其进行搜索。不太确定如何使用 JPA/Hibernate 来做到这一点。这是最快的方法,但您需要原始 SQL。

  2. 从数据库中选择所有名称字段,将它们连接起来并在 java 中进行匹配。

当您可以拆分输入(基于空格?)并在每个字段中搜索所有输入部分时,您可能有第三种选择,但这会让您遇到各种各样的问题:什么如果您的用户输入“John Doe”但您有“Doe, John”?如果有人希望找到一个使用她的中间名的人怎么办?如果有人没有姓怎么办?

总结一下:从数据库中获取所有名称字段,加入它们并使用String#contains() 搜索字符串列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多