Hibernate的单向关系映射

一、单项N - 1的关系映射(比如最常见的父子关系、比如多个人对应同一个住址)
先看如下两个POJO:
public   class  Person
{
    
private int personid;
    
private String name;
    
private int age;
    
private Address address;
    ……省略setter
&getter
}

每个Person单向地对应一个Address,但无法从Address端来访问Person
public   class  Address
{
    
//该地址的标识属性
    private int addressid;
    
//该地址的详细地址位置
    private String addressdetail;
    ……
}

对于Address端而言,不必关心Person持久化类。

1 .无连接表的N - 1
Person端增加了Address属性,该属性不是一个普通的引用属性,而是引用另一个
持久化类,使用many
- to - one元素即可映射N - 1的持久化属性。
type:确定关联实体的类;column:确定外键列的列名。
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Person " >
        
< id name = " personid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
<!-- 用来映射关联的PO column是Address在该表中的外键列名 -->
        
< many - to - one name = " address "  column = " addressid " />
    
</ class >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
</ hibernate - mapping >

2 .有连接表的N - 1
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
    
< class  name = " Person " >
        
< id name = " personid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
<!-- 用来映射关联的PO column是Address在该表中的外键列名 -->
        
<!-- 使用join元素显式确定连接表 -->
        
< join table = " join_table " >
            
< key column = " personid " />
            
< many - to - one name = " address " />
        
</ join >
    
</ class >
</ hibernate - mapping >

二、单向1
- 1的关系映射
1 .基于外键的单向1 - 1
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Person " >
        
< id name = " personid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
<!-- 增加unique = " true " -->
        
< many - to - one name = " address "  column = " addressid "  unique = " true " />
    
</ class >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
</ hibernate - mapping >

2 .有连接表的单向1 - 1
这种情况很少见,原理同上,增加unique
= " true " ;
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
    
< class  name = " Person " >
        
< id name = " personid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
< join table = " join_table " >
            
< key column = " personid " />
            
< many - to - one name = " address "  unique = " true " />
        
</ join >
    
</ class >
</ hibernate - mapping >

3 .基于主键的单向1 - 1
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Person " >
        
< id name = " personid " >
            
<!-- 基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键 -->
            
< generator  class = " foreign " >
                
<!-- 关联持久化类的属性名 -->
                
< param name = " property " > address </ param >
            
</ generator >
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
<!-- 用于映射1 - 1关联 -->
        
< one - to - one name = " address "  constrained = " true " />
    
</ class >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
</ hibernate - mapping >

三、单向1
- N的关系映射
N的一端是Address端,在单向关联中无须访问关联类。源代码如下:
public   class  Address  implements  Serializable
{
    
private int addressid;
    
private String addressdetail;
    
private Address() {}
    ……
}

下面是Person端,需要增加集合属性,并且集合属性里每个元素都是持久化类。
public   class  Person  implements  Serializable
{
    
private int personid;
    
private String name;
    
private int age;
    
//集合属性,用于关联持久化类
    prvaite Set addresses = new HashSet();
    ……
}


1 .无连接表的单向1 - N
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
    
< class  name = " Person " >
        
< id name = " personid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
<!-- 映射集合属性,关联到持久化类 -->
        
< set name = " addresss " >
            
<!-- 确定关联的外键列 -->
            
< list - index column = " displayorder " />
            
<!-- 用以映射到关联类属性 -->
            
< one - to - many  class = " Address " />
        
</ set >
    
</ class >
</ hibernate - mapping >

2 .有连接表的单向1 - N(类似于N - N)
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
    
< class  name = " Person " >
        
< id name = " personid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
<!-- 映射集合属性,关联到持久化类 -->
        
< set name = " addresss " >
            
<!-- 确定关联的外键列 -->
            
< set - index column = " displayorder " />
            
<!-- 用以映射到关联类属性,这里作了修改 -->
            
< many - to - many  class = " Address "  unique = " true " />
        
</ set >
    
</ class >
</ hibernate - mapping >

四、单向N
- N的关系映射( 1 - N)
<? xml version = " 1.0 " ?>
<! DOCTYPE hibernate - mapping
    PUBLIC 
" -//Hibernate/Hibernate Mapping DTD 3.0//EN "
    
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
< hibernate - mapping  package = " prolove " >
    
< class  name = " Address " >
        
< id name = " addressid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " addressdetail " />
    
</ class >
    
< class  name = " Person " >
        
< id name = " personid " >
            
< generator  class = " identity " />
        
</ id >
        
< property name = " name " />
        
< property name = " age " />
        
< set name = " addresss " >
            
<!-- list - index -->
            
< list - index column = " displayorder " />
            
<!-- 去除unique -->
            
< many - to - many  class = " Address " />
        
</ set >
    
</ class >
</ hibernate - mapping >
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值