0

次のドメインモデルを検討してください。

class Sales{
    String salesInvoice
    Customer customer
}

class Customer{
    int customerNumber
    String name
}

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

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

私は顧客を得ることに問題はありません。しかし、私が使用すると、println sales.dump()私は次のようなものを手に入れます

<java.util.ArrayList@d3a25f8 elementData=[mypackage.Sales : null, mypackage.Sales : null] size=2 modCount=3>

私が正しく理解している場合、これはクエリがリストを取得できたことを意味しますが、Sales私が完全に理解していないのは、なぜnullのリストを返すのですか?私は熱心なフェッチを試みましたが、この特定の問題ではうまくいかないと思います。では、null以外のSalesオブジェクトのリストを取得するにはどうすればよいですか?

4

1 に答える 1

3

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

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

ところで:ドメインクラスに単数形で名前を付けてください。したがって、名前をに変更SalesSaleます。

于 2012-04-09T13:13:53.387 に答える