nhibernate - HQL 中 setParameterList 的可选参数

标签 nhibernate hql

我有一个带有可选参数的查询

"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/

相关文章:

c# - 使用带有 NHibernate 的枚举将 varchar 值 xxxx 转换为 int 时转换失败

nhibernate - 在哪里可以找到 NHibernate ISession.Persist() 的文档?

c# - 如何检查代理的空值

SQL 到 HQL 'start with' 和 'Connect by Prior'

java - 删除 HQL 中带有 where 子句的查询

java - hibernate 问题

c# - 没有 session 绑定(bind)到当前上下文

c# - NHibernate 不同 session 间数据不一致

grails - HQL-直接查询联接表

java - HQL相关: How to create an ailias to an object instead a field