0
考慮以下表的集合:NHibernate的 - 映射基於不同屬性的身份
Client(Id bigint, Name varchar(50))
Employee(Id bigint, Name varchar(50), ClientId bigint)
被這樣映射:
<class name="Client" table="`Client`">
<id name="Id" column="`Id`" type="long">
<generator class="native" />
</id>
<property name="Name" column="`Name`" />
<bag name="Employees" cascade="all" inverse="true" >
<key column="`ClientId`" />
<one-to-many class="Employee" />
</bag>
</class>
<class name="Employee" table="`Employee`">
<id name="Id" column="`Id`" type="long">
<generator class="native" />
</id>
<property name="Name" column="`Name`" />
<many-to-one name="Client" cascade="all" column="`ClientId`" />
</class>
如果我得到一個客戶,我也得到Employee.Client = Client.Id的員工集合。大。
現在考慮這個:
Client(Id bigint, Name varchar(50), AlternativeId int)
Employee(Id bigint, Name varchar(50), ClientId bigint, AlternativeClientId int)
我希望與員工在那裏Employee.AlternativeClientId = Client.AlternativeId集合返回客戶端。
我將承擔關鍵節點,現在將改爲:
<key column="`AlternativeClientId`"/>
但除此之外,我難倒。有些過濾器可以應用到集合中,但第二個版本中的Employees集可能不是第一個版本中的Employees集的子集,所以我認爲這不是前進的方向。我試過了,但似乎是一個死衚衕。是否有某種指定查詢的方式,但不僅僅是具有ClientId = Client.Id的員工?
(對於「個爲什麼」:這是一個與系統是如何不同而有不同的數據視圖做)。
非常好,正是我所需要的。我確信我之前遇到過property-ref,但是這次找到它時,我在所有Hibernate文檔中丟失了它。有一件事要注意,property-ref字段必須被映射,它不能只是表中的一列。 –