Grails HasMany on Long

时间:2015-06-24 10:39:25

标签: grails criteria grails-domain-class

我在Long上有一个带有hasMany的类:

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

我想使用Criteria:

过滤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的情况下使用Long-List?

1 个答案:

答案 0 :(得分:0)

您必须重写标准,如下所示:

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

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