Ich habe eine Frage zu nHibernate und Filterung. Ich benutze nHibernate 2.2, aber ich denke, das wird für Versionen schon ab 1.2 gelten.Wie kann ich einen Filter auf Großeltern in nHibernate anwenden?
Ich habe ein einfaches Beispiel zur Veranschaulichung des Problems erstellt. Ich habe drei Domänenobjekte: Land, Bundesland und Stadt (angenommen, die DB - Tabellen stimmen mit der Domäne überein und haben die entsprechenden Beziehungen definiert. Ich möchte mit nHibernate - Filtern Städte auswählen, die zu einem bestimmten Land gehören. Ich glaube, ich habe die Filter richtig und der Filter durch Zustand (die Mutter) funktioniert super
ich das Domain-Modell und meine nHibernate Abbildung unten enthalten sind, Meine Abfrage eine einfache HQL-Anweisung lautet:.. 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 Mapping:
<?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>