composite-element,组合元素,在实际应用中有很重要的作用, 组合元素可以在很多 collections 中实现, 如 bag, set, list...,下面的示例使用的是 集合(set)
<class name="eg.Person" ...>
...
<set name="someNames" table="some_names" lazy="true">
<key column="id"/>
<composite-element class="eg.Name">
<parent name="Person" />
<property name="initial"/>
<property name="property1"/>
<property name="property2"/>
<many-to-one class="eg.Address" />
</composite-element>
</set>
...
</class>
实现 set 的元素是组合元素时, 必须正确实现 eg.Name 的 Equals() 和 HashCode(),如上例的 eg.Names的实现:
public override bool Equals(object obj)
{
if (obj != null)
{
property1 sap = (property1 )obj;
return (sap.property1.Equals(this.property1 ) && sap.property2.Equals(this.property2 ));
}
return false;
}
public override int GetHashCode()
{
return this. property1.GetHashCode() ^ this. property2.GetHashCode();
}
其中 property1 property2 是确定元素的一个组合(本例未使用composit-id实现),可以唯一确定表 some_names 的一条记录.