2013-08-23 2 views
1

У меня есть два домена, как это:Как получить определенные строки из дочерней таблицы в GORM

class Color { 
    static hasMany = [shade: Shade] 
    String colorName 
    String colorType 
} 

class Shade { 
    static belongsTo = [color: Color] 
    String shadeName 
    boolean isAvailable 
} 

Я хочу, чтобы узнать все colors, что есть какие-либо shades, которые не доступны:

Так если мои данные, как это:

ID  color_name color_type 
---- --------  ---------- 
22  RED   CRAYON 
23  GREEN   PAINT 
45  GREY   CRAYON 

ID  color_id  shade_name  is_available 
--- ----------  ------------- ---------- 
2  22    DARK   false 
3  22    LIGHT   true 
4  23    DARK   true 
5  23    LIGHT   true 
6  45    DARK   false 
7  45    LIGHT   false 

Я хочу, чтобы мой результат будет размером 2 с элементами цвета с идентификаторами 22 and 45, так как они имеют некоторый оттенок, который not available

Я попробовал этот запрос, но я не совсем уверен, будет ли это вернуть то, что я хочу

def query = Color.where { 
shade.isAvailable == false 
} 
def list = query.list() 

Когда я рассматриваю SQL, генерируемый спящим режимом для этого, я не заметил никаких group by положения и Выбрать оператор получает coloumns от обоих color и shade

+0

Были ответы полезны? – dmahapatro

ответ

1

вы можете использовать критерии или HQL, чтобы получить то, что вам нужно:

//Criteria Approach: 
//In this approach "shade" will be fetched eagerly with color 
def colors = Color.createCriteria().listDistinct{ 
    shade{ 
     eq('isAvailable', false) 
    } 
} 

//HQL 
//In this approach only color will be fetched 
//without shade, unless specified as ".... inner join fetch c.shade ..." 
def colors = Color.executeQuery("select distinct c from Color as c \ 
           inner join c.shade as s \ 
           where s.isAvailable is false") 

Я предпочел бы множественные обозначения для hasMany ассоциаций, поэтому я бы пошел с shades вместо shade (делает отношения более яркими).

0

HQL легче IMO

Shade.executeQuery("select distinct s.color from Shade s where s.isAvailable = false") 
Смежные вопросы