ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 6.2.5\. 一对多关联(One-to-many Associations) _一对多关联__通过外键_连接两个类对应的表,而没有中间集合表。 这个关系模型失去了一些Java集合的语义: * 一个被包含的实体的实例只能被包含在一个集合的实例中 * 一个被包含的实体的实例只能对应于集合索引的一个值中 一个从`Product`到`Part`的关联需要关键字字段,可能还有一个索引字段指向`Part`所对应的表。 `&lt;one-to-many&gt;`标记指明了一个一对多的关联。 ``` <one-to-many class="ClassName" not-found="ignore|exception" entity-name="EntityName" node="element-name" embed-xml="true|false" /> ``` | ![1](img/1.png) | `class`(必须):被关联类的名称。 | |:--- |:--- | | ![2](img/2.png) | `not-found` (可选 - 默认为`exception`): 指明若缓存的标示值关联的行缺失,该如何处理: `ignore` 会把缺失的行作为一个空关联处理。 | | ![3](img/3.png) | `entity-name` (可选): 被关联的类的实体名,作为`class`的替代。 | 例子 ``` <set name="bars"> <key column="foo_id"/> <one-to-many class="org.hibernate.Bar"/> </set> ``` 注意:`&lt;one-to-many&gt;`元素不需要定义任何字段。 也不需要指定表名。 _重要提示_:如果`一对多`关联中的外键字段定义成`NOT NULL`,你必须把`&lt;key&gt;`映射声明为`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> ```