🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 5.1.18\. 连接(join) 使用 `&lt;join&gt;` 元素,假若在表之间存在一对一关联,可以将一个类的属性映射到多张表中。 ``` <join table="tablename" schema="owner" catalog="catalog" fetch="join|select" inverse="true|false" optional="true|false"> <key ... /> <property ... /> ... </join> ``` | ![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png) | `table`: 被连接表的名称。 | |:--- |:--- | | ![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png) | `schema` (可选):覆盖由根`&lt;hibernate-mapping&gt;`元素指定的模式名称。 | | ![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png) | `catalog` (可选): 覆盖由根 `&lt;hibernate-mapping&gt;`元素指定的目录名称。 | | ![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png) | `fetch` (可选 - 默认是 `join`): 如果设置为默认值`join`, Hibernate 将使用一个内连接来得到这个类或其超类定义的`&lt;join&gt;`,而使用一个外连接来得到其子类定义的`&lt;join&gt;`。如果设置为`select`,则 Hibernate 将为子类定义的 `&lt;join&gt;`使用顺序选择。这仅在一行数据表示一个子类的对象的时候才会发生。对这个类和其超类定义的`&lt;join&gt;`,依然会使用内连接得到。 | | ![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png) | `inverse` (可选 - 默认是 `false`): 如果打开,Hibernate 不会插入或者更新此连接定义的属性。 | | ![6](https://box.kancloud.cn/2016-01-06_568cdb4f32753.png) | `optional` (可选 - 默认是 `false`): 如果打开,Hibernate 只会在此连接定义的属性非空时插入一行数据,并且总是使用一个外连接来得到这些属性。 | 例如,一个人(person)的地址(address)信息可以被映射到单独的表中(并保留所有属性的值类型语义): ``` <class name="Person" table="PERSON"> <id name="id" column="PERSON_ID">...</id> <join table="ADDRESS"> <key column="ADDRESS_ID"/> <property name="address"/> <property name="zip"/> <property name="country"/> </join> ... ``` 此特性常常对遗留数据模型有用,我们推荐表个数比类个数少,以及细粒度的领域模型。然而,在单独的继承树上切换继承映射策略是有用的,后面会解释这点。