ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 7.4.1\. 一对多(one to many) / 多对一(many to one) _双向多对一关联_ 是最常见的关联关系。(这也是标准的父/子关联关系。) ``` <class name="Person"> <id name="id" column="personId"> <generator class="native"/> </id> <many-to-one name="address" column="addressId" not-null="true"/> </class> <class name="Address"> <id name="id" column="addressId"> <generator class="native"/> </id> <set name="people" inverse="true"> <key column="addressId"/> <one-to-many class="Person"/> </set> </class> ``` ``` create table Person ( personId bigint not null primary key, addressId bigint not null ) create table Address ( addressId bigint not null primary key ) ``` 如果你使用`List`(或者其他有序集合类),你需要设置外键对应的`key`列为 `not null`,让Hibernate来从集合端管理关联,维护每个元素的索引(通过设置`update="false"` and `insert="false"`来对另一端反向操作)。 ``` <class name="Person"> <id name="id"/> ... <many-to-one name="address" column="addressId" not-null="true" insert="false" update="false"/> </class> <class name="Address"> <id name="id"/> ... <list name="people"> <key column="addressId" not-null="true"/> <list-index column="peopleIdx"/> <one-to-many class="Person"/> </list> </class> ``` 假若集合映射的`&lt;key&gt;`元素对应的底层外键字段是`NOT NULL`的,那么为这一key元素定义`not-null="true"`是很重要的。不要仅仅为可能的嵌套`&lt;column&gt;`元素定义`not-null="true"`,`&lt;key&gt;`元素也是需要的。