2012-04-09 10 views
0

には、以下のドメインモデルを考えてみましょう:GrailsのGORMのfindAllがnullコレクションを返し

class Sales{ 
    String salesInvoice 
    Customer customer 
} 

class Customer{ 
    int customerNumber 
    String name 
} 

問題:私は顧客与えられたすべての売上を取得しようとしています。したがって、コード:

def sales = Sales.findAllByCustomer(Customer.get(params.id)) 

私は顧客を得ることに問題はありません。私はprintln sales.dump()を使用する場合しかし、私は私が正しく理解していれば、これはクエリがSalesのリストを取得することができたが、それはのリストを返して、なぜ私はかなり理解していないことであることを意味

<[email protected] elementData=[mypackage.Sales : null, mypackage.Sales : null] size=2 modCount=3> 

のような何かを得ますヌル?私は熱心なフェッチを試みましたが、私はこの特定の問題ではうまくいかないと思います。では、null以外のSalesオブジェクトのリストを取得する方法は?

+0

Grailsのどのバージョンをお使いですか?おそらく、あなたは2.0.2で変更されたデータバインディング処理を実行していますか? – stefanglase

+0

私はまだ2.0.0を使用しています。新しいデータバインディングの変更は、自分のコードにどのような影響を及ぼしますか?別の構文を使用する必要がありますか、別の設定をどこかに追加する必要がありますか? –

+0

変更点については、次のblogpostをご覧ください。 http://blog.springsource.org/2012/03/28/secure-data-binding-with-grails/この機能は2.0.2ではデフォルトでしたが、変更が急激に行われたため2.0.3ではデフォルトではありませんでした多くのプロダクションコードでは – stefanglase

答えて

3

あなたが表示したオブジェクトはNULLではありませんが、オブジェクトのidは現在NULLです。各grailsドメインオブジェクトは${name of the class} : ${id of the instance}を出力するtoString()メソッドを持っています。表示されているように、インスタンスが存在する(そうでない場合はNPEがスローされた)という出力が表示されますが、IDはまだDBからフェッチされていません。

  1. 私は以前にコード内にオブジェクトを作成していると思います。コンテキストをフラッシュする必要があります。それ以外の場合は、IDは作成されません。
  2. SaleCustomerに属することを宣言する必要があります。 http://grails.org/doc/latest/guide/GORM.html#manyToOneAndOneToOne

ところで、ドメインクラスを特異な名前で指定してください。したがってSalesからSaleに名前を変更してください。

+0

あなたは正しいです。リストはnullではありません。私はGrailsが属性 'id'を取得しようとしていたと思いますが、私の主キーは代わりに' salesInvoice'という名前でした。 命名規則については、わかっています。帯電したとして有罪。 :) –

関連する問題