6.2.5. 一对多关联(One-to-many Associations)
一对多关联__通过外键连接两个类对应的表,而没有中间集合表。 这个关系模型失去了一些Java集合的语义:
一个被包含的实体的实例只能被包含在一个集合的实例中
一个被包含的实体的实例只能对应于集合索引的一个值中
一个从Product
到Part
的关联需要关键字字段,可能还有一个索引字段指向Part
所对应的表。 <one-to-many>
标记指明了一个一对多的关联。
<one-to-many
class="ClassName"
not-found="ignore|exception"
entity-name="EntityName"
node="element-name"
embed-xml="true|false"
/>
class (必须):被关联类的名称。 |
|
---|---|
not-found (可选 - 默认为exception ): 指明若缓存的标示值关联的行缺失,该如何处理: ignore 会把缺失的行作为一个空关联处理。 |
|
entity-name (可选): 被关联的类的实体名,作为class 的替代。 |
例子
<set name="bars">
<key column="foo_id"/>
<one-to-many class="org.hibernate.Bar"/>
</set>
注意:<one-to-many>
元素不需要定义任何字段。 也不需要指定表名。
重要提示:如果一对多
关联中的外键字段定义成NOT NULL
,你必须把<key>
映射声明为not-null="true"
,或者使用双向关联,并且标明inverse="true"
。参阅本章后面关于双向关联的讨论。
下面的例子展示一个Part
实体的map,把name作为关键字。( partName
是Part
的持久化属性)。注意其中的基于公式的索引的用法。
<map name="parts"
cascade="all">
<key column="productId" not-null="true"/>
<map-key formula="partName"/>
<one-to-many class="Part"/>
</map>