2011-07-28 11 views
1

これはテーマの無知で尋ねられた質問ですが、私はそれをdlongと難しいと思っています。NHibernate many to many backward query

多対多のクエリにnhibernateを使用しています。

マイオブジェクトマップ(私のデザインは、いつでもすぐに変更し得ていないではない):

コンピュータ(ID、名前、など...) - >(マッピングテーブル) - >コンフィグレーション(ID、キー、値)

1台のコンピュータには多くの設定があり、どの設定も複数のコンピュータに属することがあります。私はコンピュータを正常に読み取ることができ、リスト(バッグ)のメンバーはうまく配置されます。

多くの設定があるコンピュータを探したいと思っています。

など。持っているすべてのコンピュータ: OS:Windowsの CPU:2GHz以上 など

私は基準のクエリにこれを置くことができる方法上の任意の助けいただければ幸いです。私は基本的なことをやったことがありますが、これを頭で囲むことは大変な作業です。

お気軽にお問い合わせください。 Rob。

+0

バッグやマップとしてマップされていますか? –

答えて

1

パラメータは常に同じである場合は、次のようなクエリを使用します。

var computers = session.CreateQuery(
    @"select c 
    from Computer c 
     inner join c.Configurations as osconfig 
     inner join c.Configurations as cpuconfig 
    where 
     osconfig.Name = 'OS' 
     and osconfig.Value = :os 
     and cpuconfig.Name = 'CPU' 
     and cpuconfig.Value = :cpu") 
    .SetString("os", "Windows") 
    .SetString("cpu", "2GHz") 
    .List<Computer>(); 

あなたがマップとしてそれをマッピングした場合、あなたもこのような何か行うことができます場合は

var computers = session.CreateQuery(
    @"select c 
    from Computer c 
    where 
     c.Configurations['OS'] = :os 
     and c.Configurations['CPU'] = :cpu") 
    .SetString("os", "Windows") 
    .SetString("cpu", "2GHz") 
    .List<Computer>(); 

をパラメータは常に異なっており、それらを動的に追加するための基準を使用します。