我在Hibernate中有本机SQL查询:
SELECT * FROM my_table where id IN (:ids)
我想用:ids
替换List<Long>
命名参数。
Query query = query.createSQLQuery(...)
query.setParameter( "ids", ids, ???); // WHAT Hibernate type to use here?
我应该使用哪种类型作为setParameter
方法的第3个参数?
例如对于布尔我使用了这个并且它有效(但没有指定类型没有工作):
query.setParameter( "active", active, new NumericBooleanType());
请注意,我无法使用Query#setParameterList
(因为我的列表可以是null
)
编辑:
实际上我的查询看起来更像是这样:
SELECT * FROM my_table where :ids IS NULL OR id IN (:ids)
它帮助我支持可选参数,而无需动态创建SQL(我认为这是代码味道)。如果我的List
为空,我会用null
替换它,因为SQL不允许空IN子句(如果它null
,那么OR id IN (:ids)
部分在我的情况下根本不会执行。)
所以我只使用setParameter
因为它允许使用null
,但setParameterList
在集合为null
时会抛出异常。
我如何使setParameter
像setParameterList
一样工作,但不会抛出异常?
答案 0 :(得分:1)
由于您不能使用setParameterList,因此必须使用n替换参数动态创建SQL并在每个参数上调用setParameter()。
SQL通常不允许空IN子句,因此您需要单独处理该案例。