java - Hibernate 将值(或部分)与 2 列进行比较

标签 java hibernate servlets criteria restrictions

我有 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;
        }

最佳答案

嗯,这并不容易实现。您有两个选择:

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

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

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

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

关于java - Hibernate 将值(或部分)与 2 列进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20613366/

相关文章:

java - 使用 jsp :setProperty to set one bean in other bean

hibernate - 如何使用 ColdFusion ORM 映射基类?

java - 从 Java 代码中获取 HttpServletRequest(请求)对象

java - Servlet 异常 : invalid driver class name

java - PrintWriter java.io.IOException : Closed 错误

java - 将较大的 SQL 转换为通过 UNION ALL 组合的多个较小的 SQL

java - 如何避免连续两次生成相同的 2 个随机数

hibernate - ManyToMany关联删除连接表条目

java - 在 Java 中读取 PNG 文件并保留正确的格式

java - 从不同的jsp调用相同的servlet以达到不同的目的