我的hbm文件中有以下sql查询。 SCHEMA,A和B是模式和两个表。
select
*
from SCHEMA.A os
inner join SCHEMA.B o
on o.ORGANIZATION_ID = os.ORGANIZATION_ID
where
case
when (:pass = 'N' and os.ORG_ID in (:orgIdList)) then 1
when (:pass = 'Y') then 1
end = 1
and (os.ORG_SYNONYM like :orgSynonym or :orgSynonym is null)
这是一个非常简单的查询。我不得不使用这个案例 - 何时处理" orgIdList"的空值。参数(当null传递给sql IN时会出错)。下面是设置参数的相关java代码。
if (_orgSynonym.getOrgIdList().isEmpty()) {
query.setString("orgIdList", "pass");
query.setString("pass", "Y");
} else {
query.setString("pass", "N");
query.setParameterList("orgIdList", _orgSynonym.getOrgIdList());
}
这有效,并给我预期的输出。但我想知道是否有一种更好的方式来处理这种情况(orgIdList有时会变为null)。
答案 0 :(得分:0)
逗号分隔列表中必须至少有一个元素定义IN表达式的值集。
换句话说,无论Hibernate解析查询和传递IN()的能力如何,无论特定数据库支持这种语法(PosgreSQL不根据Jira问题),最佳做法是使用如果您希望代码是可移植的,请在此处进行动态查询(我通常更喜欢使用Criteria API进行动态查询)。
如果不需要其他一些工作,就像你所做的那样。 或者从自定义列表中包装列表。