This question already has answers here:
HQL Where IN for empty list crashes

(4个答案)


7年前关闭。




我有以下Hibernate HQL查询:
 def query =
 """
select i from Item
where i not in :someItemList
 """

 def items = Item.executeQuery(query, [someItemList: someItemList])

在我的查询中,someItemList是Item对象的列表。如果someItemList不为空,则此查询工作正常。如果列表为空,则Hibernate会引发异常。

有没有办法修改此查询,使其与空的someItemList一起使用?

最佳答案

def someItemList = ['Example'] //empty in cases

def query =
 """
select i from Item ${someItemList ? ' where i not in (:someItemList)' : ''}
 """

def items = someItemList ? Item.executeQuery(query, [someItemList: someItemList])
                         : Item.executeQuery(query)

//or try
def items = Item.executeQuery(query,
                            someItemList ? [someItemList:someItemList] : [:])

使用GString。

10-08 18:47