0

同時に効果的に結合および制限する NHibernate 基準を作成しようとしています。私のDBは次のようになります...

Cases ---> CustomerProducts <--- Customers Cases ---> CaseStatuses

各ケースは顧客の製品に関連付けられています (1 つの製品に多くのケース)。

各顧客には多数の顧客製品があります (1 人の顧客には多数の顧客製品があります)。

各ケースには、さらにケース ステータスがあります (1 つのケース ステータスから複数のケース)。

これは XML ファイルでマッピングされており、ケースと顧客の間 (顧客製品を介した) の多対多の解決は、CustomerProduct エンティティにセットがあることを意味する CustomerProduct マッピングの Sets<> で解決されています。

お客様

ケース

次に、「ケース」と入力された条件を作成します。私が適用する必要がある基準は....

  1. Statuses IN [さまざまなステータス コード]。これは....で達成されました。

    criteria.Add(Restrictions.In("CaseStatus.CaseStatusId", statuses));

  2. ここで、特定の顧客 ID のケースのみを選択する必要があります。私が試してみました...

    criteria.Add("CustomerProduct.Customer.CustomerId", customerId);

これは機能せず、NHibernate は、CustomerProduct.Customer.CustomerId へのマッピングを解決できないと通知します。

Case には CustomerProduct オブジェクトのプロパティがあります。

CustomerProduct には Customer オブジェクトのプロパティがあります。

Customer には CustomerId のプロパティがあります。

それがうまくいかない理由はありますか?

ありがとう。

4

1 に答える 1

4

CustomerProduct.Customer のエイリアスを作成する必要があると思います。

criteria.CreateAlias("CustomerProduct", "customerProduct");
criteria.CreateAlias("customerProduct.Customer", "customer");
criteria.Add(Restrictions.Eq("customer.CustomerId", customerId));

IN 制限がエイリアスなしで機能したことに驚いています。これは、Criteria API を使用した結合クエリの実行に関する優れた記事です。

于 2010-01-27T16:02:37.953 に答える