此处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然后不执行那个条件
答案 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();