2017-05-11 1 views
0

私はこのように設定した基準を持っている:Grailsの - 共同テーブルとクエリで列を取得

  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') 
       } 
      } 

私はそれは2次元のリストを返すことのアイデアを得ます。前述のようにhere。私が理解しているところでは、最初のリストは選択されたアイテムのリストであり、2番目のリストはアイテムの列のリストです。私の質問は

どのようにすべての選択項目を取得できますか?例:

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

第2リストの特定の列にアクセスするにはどうすればよいですか?例:

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

EDIT:

このクエリは、上記の基準と同じ結果を持っています。

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

私はまだequipmentForRentに列を取得しようとしています。私はこれまでに何をしようとしています。

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

それでもこのエラーが出る:

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

なぜそれがこのクエリとは異なります。

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

誰ですか? 迅速:

答えて

1

あなたは1に2つの問題を提起してきた

どのように私はすべての選択した項目を得ることができますか?例:

2番目のリストの特定の列にアクセスするにはどうすればよいですか?例:

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

第二取得するには:

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

をしかし、これのどれもがnull安全でないと問題につながる可能性があります。 は、インデックスを持つ要素を反復処理するには、次の

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

あなたが示すようなテーブルから新しいマップ(アイテム)を選択

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

てみラッピングHQLでSQLクエリを実行しようとしているあなたのクエリ

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

あなたの提案されたソリューションのマップのキーは、実際の列の権利として機能しますか? – newbie

+0

申し訳ありませんが私の無意味な質問を形成します。あなたの助けが大いにありがたいです。質問の 'new map'メソッドが私の問題を解決しました。 – newbie

+0

2番目のコメントはあなたがそれを理解していることを意味します。 – Vahid

関連する問題