使用连接表的单向关联(Unidirectional associations with join tables)

在学习中的笔记

7.3 使用连接表的单向关联(Unidirectional associations with join tables)
7.3.1 一对多 (one to many)
基于连接表的单向一对多关联应该优先被采用。请注意,通过指定unique="true",我们可以把多样性从多对多改变为一对多。
有三张表:
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 )
hibernate的映射为:
<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>
/**************************************************************************************/
7.3.2 多对一 (many to one)
基于连接表的单向多对一关联在关联关系可选的情况下应用也很普通。
关联表为:
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 )
hibernate的映射为:
<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>
/**************************************************************************************/
7.3.3 一对一 (one to one)
基于连接表的单向一对一关联非常少见,但也是可行的。
表为:
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 )
hibernate的映射为:
<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"/>
</class>
<class name = "Address">
 <id name = "id" column = "addressId">
  <generator class = "native"/>
 </id>
</class>
/**************************************************************************************/
7.3.4 多对多(many to many)
表位:
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 )

最后,还有 单向多对多关联。
<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>
 <id name = "id" column = "addressId">
  <generator class = "native"/>
 </id>
</class>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值