我有一个带有可选参数的查询
"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。
谢谢
最佳答案
不要使用 HQL,而是使用 Criteria
查询。它的设计比 HQL 更具编程性,因为您可以使用直接的 Java 代码来组装查询,这使您能够使用 if-then 逻辑。因此,您不必串联 HQL,也不必独立维护两个不同的 HQL 查询,而是用一个 Criteria
查询来解决这两种情况。示例:
//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();
关于nhibernate - HQL 中 setParameterList 的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7575205/