1
我在流利的Hibernate映射中有一個相當奇怪的要求。我有一個表(A)與另一個表(B)有複合外鍵關係。在表A的映射中,我希望同時具有從表B創建的對象和訪問定義密鑰的A的各個屬性。有沒有辦法做到這一點?如果我將列映射兩次,似乎我的索引超出範圍例外。多次映射列
我不能僅僅探索B的屬性,因爲表B中的行可能不存在。我很痛苦地意識到,我正在處理的結構中有一些顯着的氣味。這是處理遺留系統的人的命運。
我在流利的Hibernate映射中有一個相當奇怪的要求。我有一個表(A)與另一個表(B)有複合外鍵關係。在表A的映射中,我希望同時具有從表B創建的對象和訪問定義密鑰的A的各個屬性。有沒有辦法做到這一點?如果我將列映射兩次,似乎我的索引超出範圍例外。多次映射列
我不能僅僅探索B的屬性,因爲表B中的行可能不存在。我很痛苦地意識到,我正在處理的結構中有一些顯着的氣味。這是處理遺留系統的人的命運。
它的有點可能的,通過一點點的黑客。
我們要定義域與假的集合,我們將使用檢索單相關元素,如發現:
public class Foo
{
public virtual BarKey BarKey { get; set; }
public virtual Bar Bar { get { return Bars.SingleOrDefault(); } }
protected virtual ICollection<Bar> Bars { get; set; }
}
public class Bar
{
public virtual BarKey Id { get; set; }
}
//this class must override Equals and GetHashcode. Implementation not shown.
public class BarKey
{
public virtual int X { get; set; }
public virtual int Y { get; set; }
}
的BarKey
組件包含的部分屬性鍵。
現在,映射:
<class name="Foo">
<id ...><generator .../></id>
<component name="BarKey">
<property name="X" />
<property name="Y" />
</component>
<bag name="Bars" inverse="true">
<key property-ref="BarKey">
<column name="X"/>
<column name="Y"/>
</key>
<one-to-many class="Bar"/>
</bag>
</class>
<class name="Bar">
<composite-id name="Id">
<key-property name="X" />
<key-property name="Y" />
</composite-id>
</class>
的property-ref
屬性有告訴NH匹配在酒吧那些列對富,而不是它的ID號的BarKey
財產。