如何在JPA查询

时间:2016-05-24 12:03:52

标签: java mysql hibernate jpa

此处municipalities参数可以为null。但IN子句不适用于null。如果只有一个参数,即市政当局,我可以在java级别处理这个问题。但是OR中还有另一个条件,必须执行。

List<Municipality> municipalities = myDao.findAll();  // returns empty list
em.createQuery("SELECT p FROM Profile p JOIN p.municipality m WHERE m IN (:municipalities) OR m.city = :city")
    .setParameter("municipalities", municipalities)
 .setParameter("city", city)
    .getResultList();

那怎么办呢?我们可以在JPA IN子句中处理null。就像它是null然后不执行那个条件

1 个答案:

答案 0 :(得分:0)

您可以修改查询

String sql="";
if(municipalities!=null){
sql="SELECT p FROM Profile p JOIN p.municipality m WHERE m IN (:municipalities) OR m.city = :city"
}
else
{
sql="SELECT p FROM Profile p JOIN p.municipality m WHERE  m.city = :city"
}
List<Municipality> municipalities = myDao.findAll();  // returns empty list
em.createQuery(sql)
    .setParameter("municipalities", municipalities)
 .setParameter("city", city)
    .getResultList();