【问题标题】:HQL Query with like and or operators使用 like 和 or 运算符的 HQL 查询
【发布时间】:2013-02-26 10:39:38
【问题描述】:

我正在使用 Hibernate,我想根据包含或条件的类似条件获取记录。是这样的,

from Employee where empno in (select empno from Employee where empname like 'A%' or 'B%' or 'C%' )"

正确吗?建议我强大的查询..

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    不需要子查询:

    from Employee where empname like 'A%' or empname like 'B%' or empname like 'C%'
    

    【讨论】:

      【解决方案2】:

      您必须为 where 子句中的每个条件创建一个 like 语句。 HQL 将允许您执行 in/like 比较以及子选择。

      from Employee emp where emp.empno in 
      (select emp2.empno from Employee emp2 where emp2.empname like 'A%' 
      or emp2.empname like 'B%' or emp2.empname like 'C%')
      

      【讨论】:

        【解决方案3】:
        from Employee e 
            where e.empno in ( select ee.empno from Employee ee 
                               where ee.empname like 'A%' 
                               or ee.empname like 'B%' 
                               or ee.empname like 'C%' )
        

        【讨论】:

          【解决方案4】:

          如果您想要更高的安全性并防止 sql 注入,您可以使用带有 setParameter 和通配符的 createQuery,如下所示:

          @Override
          public List<Employee> searchEmployee(String searchName) {
              Session currentSession = sessionFactory.getCurrentSession();
          Query<Employee> searchQuery = currentSession.createQuery(
                              "from Employee where lower(empname ) like :theName or lower(empLlastName) like :theName", Employee.class);
          searchQuery.setParameter("theName", "%" + searchName.toLowerCase() + "%");
          List<Employee> employees = searchQuery.getResultList();
          return employees;
          }
          

          【讨论】:

            猜你喜欢
            • 2010-12-26
            • 1970-01-01
            • 2015-10-16
            • 2012-12-07
            • 1970-01-01
            • 2014-03-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多