💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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](img/1.png) | `table`: 被连接表的名称。 | |:--- |:--- | | ![2](img/2.png) | `schema` (可选):覆盖由根`&lt;hibernate-mapping&gt;`元素指定的模式名称。 | | ![3](img/3.png) | `catalog` (可选): 覆盖由根 `&lt;hibernate-mapping&gt;`元素指定的目录名称。 | | ![4](img/4.png) | `fetch` (可选 - 默认是 `join`): 如果设置为默认值`join`, Hibernate 将使用一个内连接来得到这个类或其超类定义的`&lt;join&gt;`,而使用一个外连接来得到其子类定义的`&lt;join&gt;`。如果设置为`select`,则 Hibernate 将为子类定义的 `&lt;join&gt;`使用顺序选择。这仅在一行数据表示一个子类的对象的时候才会发生。对这个类和其超类定义的`&lt;join&gt;`,依然会使用内连接得到。 | | ![5](img/5.png) | `inverse` (可选 - 默认是 `false`): 如果打开,Hibernate 不会插入或者更新此连接定义的属性。 | | ![6](img/6.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> ... ``` 此特性常常对遗留数据模型有用,我们推荐表个数比类个数少,以及细粒度的领域模型。然而,在单独的继承树上切换继承映射策略是有用的,后面会解释这点。