Frage

Ich habe folgende Grails Domain-Objekte

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

class Attribute {

    Boolean mandatory = false
    Integer seq

    static belongsTo = [productType: ProductType]
}

Ich möchte alle ProductTypes und ihre Pflicht Attributes bekommen. Außerdem würde ich die ausgewählten Attributes wie eifrig durch die seq Eigenschaft geladen und sortiert werden. Ich habe alle Arten von HQL und Kriterien Abfragen versucht, aber kann nicht scheinen, um es herauszufinden.

War es hilfreich?

Lösung

Diese Abfrage wird alle Produkttypen zurück, die obligatorischen Attribute haben, mit diesen Attributen mit Spannung geladen:

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

Die Attribute sind in abgebildet Sets, so gibt es keine Ordnung, aber es ist einfach genug, um zu sammeln und zu sortieren:

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

Andere Tipps

Alternativ können Sie eine sortierte Liste der vielen Neben erhalten, indem eine vergleichbare Schnittstelle in der vielseitigen Bereich Implementierung und SortedSet in der einseitigen (anstelle des Standard-Set) injiziert wird.

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)
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top