GORM Hibernate запрос - PullRequest
       14

GORM Hibernate запрос

1 голос
/ 16 сентября 2009

У меня есть следующие доменные объекты Grails

class ProductType {
    String name
    static hasMany = [attributes: Attribute]
}

class Attribute {

    Boolean mandatory = false
    Integer seq

    static belongsTo = [productType: ProductType]
}

Я хотел бы получить все ProductType с и их обязательные Attribute с. Кроме того, я бы хотел, чтобы выбранные Attribute были загружены и отсортированы по свойству seq. Я пробовал все виды запросов HQL и Criteria, но, похоже, не могу понять.

Ответы [ 2 ]

1 голос
/ 19 сентября 2009

В качестве альтернативы, вы можете получить отсортированный список многих сторон, внедрив Comparable Interface в домен многих сторон и добавив SortedSet в одну сторону (вместо набора по умолчанию).

class ProductType {
    String name
    SortedSet attributes
    static hasMany = [attributes: Attribute]
}

class Attribute implements Comparable {

    Boolean mandatory = false
    Integer seq

    static belongsTo = [productType: ProductType]

    int compareTo(obj) {
       seq.compareTo(obj.seq)
    }
}
1 голос
/ 16 сентября 2009

Этот запрос вернет все ProductTypes, которые имеют обязательные атрибуты, с такими загруженными атрибутами:

def types = ProductType.executeQuery("""
   select distinct type from ProductType type
   left join fetch type.attributes attribute
   where attribute.mandatory=true""")

Атрибуты находятся в отображенных наборах, поэтому упорядочения нет, но их достаточно просто собрать и отсортировать:

def sortedAttributes = types.collect { it.attributes }.flatten().sort { it.seq }
...