休眠。模拟查询#setParameterList

时间:2015-04-30 01:13:42

标签: java hibernate

我在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时会抛出异常。

我如何使setParametersetParameterList一样工作,但不会抛出异常?

1 个答案:

答案 0 :(得分:1)

由于您不能使用setParameterList,因此必须使用n替换参数动态创建SQL并在每个参数上调用setParameter()。

SQL通常不允许空IN子句,因此您需要单独处理该案例。