我有一个带可选参数
的查询"SELECT ClinicId,Name from Clinic where :ClinicIds is NULL OR ClinicId IN :ClinicIds"
List<int> ClinicIds = null;
我正在传递参数,如下所示
q.SetParameterList("ClinicIds", ClinicIds);
因为ClinicId是可选参数。如果我将null传递给SetParameterList,我会遇到异常。知道如何将可选参数(空值)传递给SetParameterList。
由于
答案 0 :(得分:3)
使用Criteria
查询,而不是使用HQL。它的设计比HQL更具编程性,因为您使用直接的Java代码来汇编查询,这使您可以使用if-then逻辑。因此,您需要一个Criteria
查询来解决这两种情况,而不是连接HQL,或者您需要独立维护两个不同的HQL查询。例如:
//SELECT ClinicId,Name from Clinic where :ClinicIds is NULL OR ClinicId IN :ClinicIds
Criteria criteria = getSession().createCriteria(Clinic.class);
if(ClinicIds == null) {
criteria.add(Restrictions.eq("ClinicId", null));
} else {
criteria.add(Restrictions.or(
Restrictions.eq("ClinicId", null),
criteria.add(Restrictions.in("ClinicId", ClinicIds));
)
);
}
return criteria.list();
答案 1 :(得分:1)
你做不到。这将生成无效的SQL。
您需要根据是否ClinicIds
来更改HQL。
答案 2 :(得分:0)
我这样做了:
"SELECT ClinicId,Name from Clinic where -1 in (:ClinicIds) OR ClinicId IN :ClinicIds"
和
if(ClinicIds == null or ClinicIds.isEmpty()){
ClinicIds = new List<int>();
ClinicIds.add(-1);
}
q.SetParameterList("ClinicIds", ClinicIds);
只是一招(
)