2015-12-01 4 views
0

Я знаю, что могу сделать Parent.childId в Grails, но есть ли что-нибудь подобное, я могу только загрузить идентификаторы (прокси) для каждого ребенка в hasMany? I.e., что-то похожее на Parent.childrenIds?Извлечь только идентификаторы из hasMany в Grails?

В моем случае hasMany сопоставлен соединением.

+0

Не так элегантно, но я уверен, что решение 'createCriteria() возможно. Думая о том, как таблицы db сопоставляются с дочерним классом, имеющим идентификатор родителя в столбце, вероятно, приводит к выборке независимо, поэтому я не уверен, сколько вы можете получить. – tylerwal

+0

На самом деле, я использую joinTable для этого конкретного отношения - поэтому идентификаторы для детей доступны в отдельной таблице. Если Grails предложит Parent.childrenIds или подобное, детали, вероятно, будут обрабатываться за занавесками. – wwwclaes

ответ

0

С joinTable в виду:

def getChildIds(parentId) { 
    Child.withSession { session -> 
     def sql = new Sql(session.connection())  
     sql.rows(
      'select pc.child_id from parent_child pc where pc.parent_id = :parentId', 
      [parentId: parentId] 
     ).collect{ it.child_id } 
    } 
} 

Это работает для joinTable отображенной как таковой:

class Parent { 

    static mapping = { 
     childs joinTable: [name: 'parent_child', column: 'child_id', key: 'parent_id'] 
    } 
    ... 

Это не красиво, но я считаю, что это лучший способ, учитывая ситуацию и требования.

+0

Я собираюсь принять это как ответ, хотя я не буду использовать его из-за «некрасивой» части :-) Спасибо за ваши усилия! – wwwclaes

2

Вы можете сделать это с помощью projection. например

def result = Child.createCriteria().list { 
    projections { 
     property('id') 
    } 
    eq ('parent', parent) 
} 

Это вернет только идентификаторы дочерних объектов.

+0

Спасибо и хороший ответ. Но я использую joinTable для этих конкретных отношений, поэтому я боюсь, что это не решит его из коробки (родительский недоступен в дочернем домене). Извините за то, что оставил это, я не понимал этого, пока вы не ответили. – wwwclaes

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