假设我有一个包含两个变量的实体: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();
}
答案 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();