我有一个关于hasMany on Long的类(class):

 class Test {
   static hasMany = [longList:Long]
}

我想使用条件对longList进行过滤:
Test.createCriteria().list{
        'in'('longList',[Long.valueOf('1')])
}

我得到了 SQLException :没有为参数1指定值。

SQL看起来像这样:
select * from test this_ where this_.id in (?)

我尝试过类似的事情:
    createAlias('labours', 'l')
 eq('l',Long.valueOf(filter.labourId)) )

要么
eq('labours.value', Long.valueOf(filter.labourId))

但是我无法正常工作。

对于变通办法,我将使另一个域类:
class Test {
     statis hasMany=[longList:TestLongList]
}
class TestLongList{
   Long longListItem
   static belongsto = [test:Test]
}

这应该可以工作,但是如果我创建测试对象,则必须始终创建一个TestLongList实例,因此代码将来自:
test.addToLongList(Long.valueOf('22'))


TestLongList tll = new TestLongList
tll.test= test
tll.longListitem = Long.valueOf('22')
tll.save()
test.addToLongList(tll)

有没有办法在没有HQL的情况下留在长列表中?

最佳答案

您必须将条件重写为如下所示:

Test.createCriteria().list{
   createAlias('longList', 'l')
   'in' ('l.elements', [1L])
}

这归结为Hibernate用于存储集合的属性名称(elements)。

07-28 01:23