2017-05-11 2 views
0

Ich habe ein Kriterium wie folgt aufgebaut:Grails - Spalte in Abfrage mit gemeinsamem Tisch bekommen

  def e = Equipment.createCriteria() 
      def equipmentInstanceList = e.list { 
       createAlias "rentals", "r", org.hibernate.sql.JoinType.LEFT_OUTER_JOIN 
       projections { 
        property('name') 
        property('r.status') 
        property('r.dateRented') 
        property('r.dateReturned') 
       } 
      } 

ich die Idee, dass es 2-dimensionale Liste zurück. wie erwähnt here. Nach dem, was ich verstanden habe, ist die erste Liste die Liste der ausgewählten Elemente und die zweite Liste ist die Liste der Spalten der Elemente. Meine Frage ist

Wie kann ich alle ausgewählten Artikel erhalten? Beispiel:

def list = equipmentInstanceList.[all] //supposed to get all the selected items 
def a = equipmentInstanceList[1] //will only get the 1st item in 1st list 

Wie kann ich auf die spezifische Spalte in der zweiten Liste zugreifen? Beispiel:

def a = equipmentInstanceList[1].status //supposed to get the status column in 2nd list 

EDIT:

Diese Abfrage hat das gleiche Ergebnis wie die oben genannten Kriterien.

def equipmentForRent = Equipment.executeQuery("SELECT e.name, r.status, r.dateRented, r.dateReturned FROM ers.Equipment e LEFT JOIN e.rentals r") 

Ich versuche immer noch die Spalten in equipmentForRent zu erhalten. Was ich bisher versuche.

each.equipmentForRent { e -> println e.dateReturned } 

Noch diesen Fehler:

Exception evaluating property 'dateRented' for java.util.Arrays$ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: dateRented for class: java.lang.String 

Warum unterscheidet es sich von dieser Abfrage:

def rentalTest = Rental.executeQuery("FROM Rental") 
println rentalTest.status //no error, returns the status column from rental 

jedermann? in einer

Antwort

1

Sie haben zwei Fragen aufgeworfen: schnell:

Wie kann ich alle bekommen die ausgewählten Elemente? Beispiel:

Wie kann ich auf die spezifische Spalte in der 2. Liste zugreifen? Beispiel:

def a = equipmentInstanceList[1].status //supposed to get the status column in 2nd list 

2. Um:

def a = equipmentInstanceList[2].status // this now points to 2nd element status 

Aber nichts davon ist null sicher und zu Problemen führen könnte. Um mit einem Index durch ein Element iterieren:

equipmentInstanceList?.eachWithIndex{ e,i-> 
    println "-- $i is index $e is element" 
} 

Ihre Anfrage Sie versucht haben, SQL-Abfrage in HQL

def equipmentForRent = Equipment.executeQuery("SELECT e.name, r.status, r.dateRented, r.dateReturned FROM ers.Equipment e LEFT JOIN e.rentals r") 

Try Verpackung wählen neue Karte (Artikel) von Tisch zu tun wie gezeigt

def equipmentForRent = Equipment.executeQuery("SELECT new map(e.name as name, r.status as status, r.dateRented as dateRented, r.dateReturned as dateReturned) FROM Equipment e LEFT JOIN e.rentals r") 
+0

der Schlüssel der Karte in Ihrer vorgeschlagenen Lösung wird als die richtige Spalte dienen, richtig? – newbie

+0

Entschuldige meine sinnlose Frage. Ihre Hilfe wird sehr geschätzt die 'neue Karte' Methode in der Abfrage löste mein Problem – newbie

+0

Keine Probleme Ich nehme an, dass Ihr 2. Kommentar bedeutet, dass Sie es verstehen. – Vahid

Verwandte Themen