Grails: Projektion auf viele Tabellen?
Ich habe einige Probleme mit der Projektion in Grails. Könnten Sie mir bitte helfen diese überprüfen und Lösungen vorschlagen für mich?
-
Ich möchte die Abfrage der Daten auf viele Tabellen, die viele-zu-eins-Beziehung und Projektion auf einige Eigenschaften auf Sie beide. Zum Beispiel:
class Person { int id String name String address static hasMany = [cars : Car] } class Car { int id String brand long price Person owner static belongsTo = [owner : Person] }
So, wie kann ich mit nur einer Abfrage withCriteria (gelten Projektion), um Informationen zu bekommen, die das angegebene Auto (gehören Marke, Preis und name des Eigentümers)? Ist es möglich, zu verwenden:
Car.withCriteria { projections { property("brand") property("price") property("owner.name") } eq("id", carId) }
-
Kann ich eine Projektion, um Informationen zu bekommen von einem bestimmten person zusammen mit dem Namen der alle seine Autos? Zum Beispiel: [01, Perter, 01 Street Ein, [Mercedes, Toyota, Ducatti]]?
-
Einer besonderen situation: (mit den oben Person-Klasse)
Eine person kann kommen viele Organisation und eine Organisation haben kann, einem "übergeordneten" Organisationen (und vice versa), einer Organisation können viele andere abhängen, Organisationen). Aber es gibt eine Regel: eine person nur beitreten kann, nur eine untergeordnete Organisation einer bestimmten Organisation. So mit einer bestimmten Organisation O und eine person P, was ist der Schnellste Weg, um Informationen von P zusammen mit den Namen der hing Organisation O die P als Mitglied. Ich benutze lieber Grails-Projektion.Hier die Daten Modell:
class Person { int id String name String address static hasMany = [joinedOrgs : Organization] } class Organization { int id String name Organization parentOrg static hasMany = [members : Person, childOrgs : Organization] }
Ich bin ein Neuling mit Grails, und ich würde gerne verstehen, GORM vieles mehr. Ich danke Ihnen so sehr für Ihre Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für (1) und (2) ich weiß nicht, ob es einen Weg gibt, das zu tun, was Sie wollen, mit nur 1 Kriterien Abfrage, aber der alternative Weg ist, scheint nur mehr zu sein einfach und natürlich. Für (1):
Für (2)
Über (3) ist es eine Art design-problem hier. Ihre aktuelle domain design spiegelt nicht die Regel, die Sie beschreiben, so wird es schwer sein, zu behaupten, dass die Einschränkung. Sie können prüfen, die Zuordnung eines PersonOrganization Tisch und machen childrenOrganization eine vorübergehende Eigenschaft. Zum Beispiel:
Danach können Sie eine trace-back-Funktion, wie getAllAncestors() bestimmt alle parent-Hierarchie einer Organisation, die look it up in der person-Organisation-Liste. Es scheint nicht der beste Weg, aber das ist ein möglicher Weg.
Versuchen, diese
alias
benötigt?owner.name
direkt inproperty('owner.name', 'owner.name')
Auch können Sie Holen oben Ergebnisse ohne alias, aber Sie brauchen mehr code schreiben für diesen. siehe unten Beispielprojections { owner { property('name', 'name') } property('brand','brand') property('price','price') }
Bitte lassen Sie mich wissen, wenn Sie noch keine Verwirrung zu haben, oder war Es nicht eine richtige Antwort für Sie. DankcreateAlias('owner', 'owner')
als werden können, ist es möglich, in neueren Versionen von grailsFür (No. 1) ich denke, was du suchst, ist hier erklärt
http://grails.1312388.n4.nabble.com/grails-reports-page-multiple-domain-criteria-join-td3510604.html
post highlights mit
.createCriteria()