在JPQL中为过滤器添加两个String变量?

时间:2014-07-22 20:07:35

标签: java jpa jpql

假设我有一个包含两个变量的实体:name和surname。我想创建一个JPQL方法,该方法将返回 name +“”+ surname 与搜索匹配的对象列表。我已经尝试创建以下JPQL方法,但它不起作用。我本可以在我的实体类中创建一个额外的变量,它将总结名称和姓氏;但这是不好的做法。非常感谢。

 public List<User> findUserByFullName(String fullName) {
        return entityManager.createQuery("select c from DefaultUser c where c.name + ' ' + c.surname like :custName").setParameter("custName", fullName)
                        .getResultList();
    }

2 个答案:

答案 0 :(得分:4)

使用JPQL查询中的CONCAT函数来形成全名,如下所示:

select c from DefaultUser c where concat(c.name, ' ', c.surname) like :custName

有关详细信息,请参阅Java Persistence 2.0, Final Release中的第4.6.17.2.1节字符串函数

答案 1 :(得分:2)

你能不只是在Java中拆分名称,然后查询拆分名称?

然后,这将允许数据库正确使用其索引。

String[] names = fullName.split(" ");

 return entityManager.createQuery("select c from DefaultUser c where c.name = :name and c.surname like :surName").setParameter("name", names[0]).setParameter("surName", names[names.length-1]).getResultList();