【问题标题】:Grails HasMany on LongGrails HasMany on Long
【发布时间】:2015-06-24 10:39:24
【问题描述】:

我有一个在 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 的情况下保持长列表?

【问题讨论】:

    标签: grails criteria grails-domain-class


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多