8

コレクションを持つクラスがあり、そのクラスの nHibernate マッピング ファイルにバッグとしてマップされています。そのクラスのすべてのインスタンスを返したいと思います。そのコレクションには、渡したオブジェクトが 1 つ以上含まれています。

例:

私の親クラスは DocumentDefinition と呼ばれます。ドキュメントにアクセスできる nHibernate エンティティであるロールのコレクションがあります。これら 2 つは、多対多マッピングを介して接続されます。クエリにロールのコレクションを渡し、それらのロールの 1 つ以上が渡されたすべての DocumentDefinition インスタンスを返したいと考えています。

親クラス DocumentDefinition でのマッピング:

 <bag name="AllowedRoles" table="Many-To-Many Table" lazy="false">
      <key column="ParentDefinition" /> //Column from Many-To-Many Table
      <many-to-many class="MyRolesClass" column="ParentRole" /> //Column from Many-To-Many Table
 </bag>

私がこれまでに試したことの例:

Select distinct d from DocumentDefinition d, MyRolesClass r where r in :roles and r in elements(d.Group)

Roles は、渡したいコレクションです。

では、r (ロール クラス) が渡されたパラメーター リストと DocumentDefinition オブジェクトのコレクションの両方にある DocumentDefinitions を返すクエリを実行するにはどうすればよいでしょうか。

それが明確であることを願っています!乾杯!

4

1 に答える 1

8

あなたはとても親しかった...クエリは次のようになります。

select distinct d
from DocumentDefinition d, MyRolesClass r
where r in (:roles) and r in elements(d.AllowedRoles)

そして、 を使用して目的のロールを送信します.SetParameterList("roles", collectionOfRoles)

ところで、投稿したマッピングと一致しないコレクション名を変更しました。

考慮すべきもう 1 つの点: lazy="false" は、ほとんどの場合、コレクションには適していません。

于 2010-06-21T21:19:08.743 に答える