Grails HasMany 长
Grails HasMany on Long
我有一个 class,在 Long 上有一个 hasMany:
class Test {
static hasMany = [longList:Long]
}
我想使用条件过滤 longList:
Test.createCriteria().list{
'in'('longList',[Long.valueOf('1')])
}
我得到一个SQL异常:没有为参数 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:
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
) 的名称。
我有一个 class,在 Long 上有一个 hasMany:
class Test {
static hasMany = [longList:Long]
}
我想使用条件过滤 longList:
Test.createCriteria().list{
'in'('longList',[Long.valueOf('1')])
}
我得到一个SQL异常:没有为参数 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:
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
) 的名称。