2011-07-07 6 views
0

ここに初めて、Grailsを初めて使用した場合、1対多の関係で奇妙な問題が発生します。Grails:parent id nullオブジェクトがリストされているオブジェクトがnullの場合

私はGrailsアプリケーションを作成して、Webサイトやスマートフォンアプリケーションにサービスを提供しています。
私は、より具体的なサービスを継承できる汎用のアクション(作成、取得、変更、リスト、削除など)を処理できる親サービスを作るために最善を尽くしました。

私が直面している問題は、リストアクションです。呼び出し側が私に送るパラメータからwithCriteriaリクエストを作成します。

私は2つのドメインがあります:私は必要なもの

class A { 
    static hasMany = [bs:B] 
} 

class B { 
    static belongsTo = [a:A] 
} 

がオブジェクトに属するクラスBのオブジェクトを一覧表示することで、私のジェネリックリストアクションはこれを生成します。

List objects = B.withCriteria() { 
    createAlias("A","A") 
    eq("A.id", myId) 
} 

すべてが正常に動作しますが、まず、ドメインインスタンスからJSONレスポンスを生成する汎用のtoJSON()メソッドを作成しました。そのためには、JSONレスポンスに追加するドメインプロパティの名前を含むStringリストを繰り返し処理します。そして、私はこのようにそれらにアクセス:私のオブジェクトが他のオブジェクトへの参照が含まれている場合は

objects[0]."$propertyName" 

、私はJSONレスポンスでそれらのIDを追加します。

objects[0].aId 

しかしこいつはnullです:
これらのIDは、この構文を使用してアクセスすることができます!アクセスした場合:

objects[0].a.id 

私は正しい親のIDを持っています!

すなわち、私はいくつかのテストをしたと私はオブジェクトによってBのオブジェクトをフィルタリングしていない場合、私は親IDに私はそれをやりたい方法でアクセスすることができます

List objects = B.withCriteria() {} 
objects[0].aId 

何の任意のアイデアをここにいる?
ありがとうございます。

答えて

0

あなたの編集のためにいくつかのものが削除されました。私はなぜこの種のクエリの基準を使用する必要があるのか​​分かりません。

def car = new Car() 
car.addToWheels(new Wheel()) 
car.save(flush:true) 

def theCar = Car.get(1) 
def wheels = car.wheels 

OR:

def wheels = Wheel.findAllByCar(carInstance). 

OR:(あなたがしたいと思う理由を私は知らない)

def carInstance = Car.get(carId) 
List wheels = Wheel.withCriteria { 
    eq("car", carInstance) 
} 
assertTrue(wheels[0].car.id == carId) 
+0

は、あなたの答えをありがとうしかし、私は単純なを書きたいです実際、私のドメインは既にこのように構成されています。 – Allan

+0

これを反映するようにメッセージを編集します。 – Allan

+0

あなたはすでにAオブジェクトを持っていますか?もしそうなら、あなたはdef bs = B.findAllByA(aInstance)のようなことをすることができます。なぜ私はこのための基準を使用する必要があるか分かりません。 – Gregg

関連する問題