hibernate的关联

1.单向关联 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 单向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> </class> create table Person ( personId bigint not null primary key, addressId bigint not null ) create table Address ( addressId bigint not null primary key )         7.2.2. 一对一(one to one) 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。

<class name="Person">     <id name="id" column="personId">         <generator class="native"/>     </id>     <many-to-one name="address"         column="addressId"         unique="true"         not-null="true"/> </class>

<class name="Address">     <id name="id" column="addressId">         <generator class="native"/>     </id> </class> create table Person ( personId bigint not null primary key, addressId bigint not null unique ) create table Address ( addressId bigint not null primary key )         基于主键关联的单向一对一关联通常使用一个特定的id生成器。(请注意,在这个例子中我们掉换了关联的方向。)

<class name="Person">     <id name="id" column="personId">         <generator class="native"/>     </id> </class>

<class name="Address">     <id name="id" column="personId">         <generator class="foreign">             <param name="property">person</param>         </generator>     </id>     <one-to-one name="person" constrained="true"/> </class> create table Person ( personId bigint not null primary key ) create table Address ( personId bigint not null primary key )         7.2.3. 一对多(one to many) 基于外键关联的单向一对多关联是一种很少见的情况,并不推荐使用。

<class name="Person">     <id name="id" column="personId">         <generator class="native"/>     </id>     <set name="addresses">         <key column="personId"             not-null="true"/>         <one-to-many class="Address"/>     </set> </class>

<class name="Address">     <id name="id" column="addressId">         <generator class="native"/>     </id> </class> create table Person ( personId bigint not null primary key ) create table Address ( addressId bigint not null primary key, personId bigint not null )         我们认为对于这种关联关系最好使用连接表。

2使用连接表的单向关联 7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 基于连接表的单向一对多关联 应该优先被采用。请注意,通过指定unique="true",我们可以把多样性从多对多改变为一对多。

<class name="Person">     <id name="id" column="personId">         <generator class="native"/>     </id>     <set name="addresses" table="PersonAddress">         <key column="personId"/>         <many-to-many column="addressId"             unique="true"             class="Address"/>     </set> </class>

<class name="Address">     <id name="id" column="addressId">         <generator class="native"/>     </id> </class> create table Person ( personId bigint not null primary key ) create table PersonAddress ( personId not null, addressId bigint not null primary key ) create table Address ( addressId bigint not null primary key )         7.3.2. 多对一(many to one) 基于连接表的单向多对一关联在关联关系可选的情况下应用也很普遍。

<class name="Person">     <id name="id" column="personId">         <generator class="native"/>     </id>     <join table="PersonAddress"         optional="true">         <key column="personId" unique="true"/>         <many-to-one name="address"             column="addressId"             not-null="true"/>     </join> </class>

<class name="Address">     <id name="id" column="addressId">         <generator class="native"/>     </id> </class> create table Person ( personId bigint not null primary key ) create table PersonAddress ( personId bigint not null primary key, addressId bigint not null ) create table Address ( addressId bigint not null primary key )         7.3.3. 一对一(one to one) 基于连接表的单向一对一关联非常少见,但也是可行的。

<class name="Person">     <id name="id" column="personId">         <generator class="native"/>     </id>     <join table="PersonAddress"         optional="true">         <key column="personId"             unique="true"/>         <many-to-one name="address"             column="addressId"             not-null="true"             unique="true"/>     </join> </class>

<class name="Address">     <id name="id" column="addressId">         <generator class="native"/>     </id> </class> create table Person ( personId bigint not null primary key ) create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique ) create table Address ( addressId bigint not null primary key )         7.3.4. 多对多(many to many) 最后,还有 单向多对多关联.

<class name="Person">     <id name="id" column="personId">         <generator class="native"/>     </id>     <set name="addresses" table="PersonAddress">         <key column="personId"/>         <many-to-many column="addressId"             class="Address"/>     </set> </class>

<class name="Address">     <id name="id" column="addressId">         <generator class="native"/>     </id> </class> create table Person ( personId bigint not null primary key ) create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) ) create table Address ( addressId bigint not null primary key )         3双向关联(反转)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值