私はnHibernateとフィルタリングに関する質問があります。私はnHibernate 2.2を使用していますが、これは1.2までのバージョンにも適用されると思います。nHibernateの祖父母にフィルタを適用するにはどうすればよいですか?
問題を説明するための簡単な例を作成しました。私は3つのドメインオブジェクトを持っています:国、州、都市(DBテーブルがドメインと一致し、適切なリレーションが定義されていると仮定します)nHibernateフィルタを使用して特定の国に属する都市を選択します。正しくフィルタおよび状態(親)によってフィルタが素晴らしい作品
私はドメインモデルと以下の私のNHibernateはマッピングが含まれている私のクエリは、簡単なHQL文です:。。select f from city f
Country
CountryId int
Name string
States list
State
StateId int
Name string
Country object
Cities list
City
CityId int
Name string
State object
NHibernateはマッピング:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="CMDB.Model" namespace="CMDB.Model">
<class name="Country" table="Country" lazy="false">
<id name="CountryId" type="int" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Name" type="string"/>
<bag name="States" table="State" inverse="true" lazy="false" cascade="all-delete-orphan">
<key column="StateId"/>
<many-to-many class="State" column="StateId"/>
<filter name="ByCountry" condition=":CountryId = CountryId"/>
</bag>
</class>
<class name="State" table="State" lazy="false">
<id name="StateId" type="int" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Name" type="string"/>
<many-to-one name="Country" column="CountryId" class="Country" lazy ="false" />
<bag name="Cities" table="City" inverse="true" lazy="false" cascade="all-delete-orphan">
<key column="CityId"/>
<many-to-many class="City" column="CityId"/>
<filter name="ByState" condition=":StateId = StateId"/>
</bag>
<filter name="ByCountry" condition=":CountryId = CountryId"/>
</class>
<class name="City" table="City" lazy="false">
<id name="CityId" type="int" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Name" type="string"/>
<many-to-one name="State" column="StateId" class="State" lazy ="false" />
<filter name="ByState" condition=":StateId = StateId"/>
</class>
<filter-def name="ByCountry">
<filter-param name="CountryId" type="int"/>
</filter-def>
<filter-def name="ByState">
<filter-param name="StateId" type="int"/>
</filter-def>
</hibernate-mapping>