2015-06-24 3 views
0

У меня есть класс с hasMany на Лонг:Grails HasMany на Лонг

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

Я хочу, чтобы фильтровать по лонг с критериями:

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 Instance, если я создаю тестовый объект, поэтому код превратится из:

test.addToLongList(Long.valueOf('22')) 

в

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

есть ли способ, чтобы остаться с Лонг-лист без HQL?

ответ

0

Вы должны переписать критерии выглядеть следующим образом:

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

Это сводится к имени свойства, при которых Hibernate хранит коллекцию (elements).

+0

Это сработало для меня, спасибо. – YAT

Смежные вопросы