为了解释这一点,我将从文档中的另一个示例开始:
代码段显示了字符串集合的映射:
<set name="aliases"
table="person_aliases"
sort="natural">
<key column="person"/>
<element column="name" type="string"/>
</set>
在这种情况下,我们确实有一个集合aliases
,以表示,并以List<string>
映射<element>
。
我们可以清楚地看到,这里的每个元素(别名)都是string
-值类型(与Reference类型相反)。我们也没有想到,有可能是系统中的任何进一步的地方,引用这个元素......
因为它不是一个Refeence类型。
现在,让我们转到:
我们看到的是一个例子,(非常)相似,但代替<element>
,它使用的是<composite-element>
:
<set name="purchasedItems" table="purchase_items" lazy="true">
<key column="order_id">
<composite-element class="eg.Purchase">
<property name="purchaseDate"/>
<property name="price"/>
<property name="quantity"/>
<many-to-one name="item" class="eg.Item"/> <!-- class attribute is optional -->
</composite-element>
</set>
虽然对于string
Java我们有相关的对象(字符串) -对于上述构造,我们确实需要自定义类型。那将是一个class Pruchase {}
但是,即使这是一个自定义类型(我们自己的类),在这种情况下,它仍表示为值类型(同样,与引用类型相反)。
为什么?因为它没有任何ID,所以要引用任何密钥。它是从Domain建模的角度构造的。也许该文档中的引用可以提供更多帮助:
与值类型一样,组件也不支持共享引用。换句话说,两个人可以具有相同的名称,但是两个人对象将包含两个独立的名称对象,这些对象的值仅“相同”。
最后:
这是一个功能。我们可以使用<composite-element>
和的事实<element>
并不意味着我们必须这样做。通过将其映射为,我们仍然可以将Purchase类转换为第一级公民<class>
。然后所有标准的东西将再次起作用-因为它将代表引用类型...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句