• hibernate>一对一关联映射 (onetoone)


    一对一关联映射 (one-to-one)

    两个对象之间是一对一的关系,如Person-IdCard,有两种策略可以实现一对一的关联映射

    主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联
    唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系;

    一、一对一主键关联映射-单向(Person---->IdCard)

    Person类

    publicclass Person {
    
         private int id;
    
         private IdCard  idCard;
    
    }
    

    映射文件

    <hibernate-mapping>
    	<class name="com.wsz.entity.Person" table="t_person">
    	        <id name="id">
                <generator class="foreign">
                <param name="property">idCard</param>
                </generator>
            </id>
    		<property name="name" />
    	    <one-to-one name="idCard" constrained="true"/>
    		
    	</class>
    </hibernate-mapping>

    IdCard类

    publicclass IdCard{
    
         private int id;
    
        private String idnumber;
    
    }
    

    映射文件

    <hibernate-mapping>
    	<class name="com.wsz.entity.Id_Card" table="t_idcard">
    		<id name="id">	
    			<generator class="native" />
    		</id>
    		<property name="idnumber" />
    	</class>
    </hibernate-mapping>

    二、一对一主键关联映射-双向(Person<---->IdCard)

    Person类 

    publicclass Person {
    
         private int id;
    
         private IdCard  idCard;
    
    }
    

    映射文件

    <hibernate-mapping>
    	<class name="com.wsz.entity.Person" table="t_person">
    	        <id name="id">
                <generator class="foreign">
                <param name="property">idCard</param>
                </generator>
            </id>
    		<property name="name" />
    	    <one-to-one name="idCard" constrained="true"/>
    		
    	</class>
    </hibernate-mapping>

    IdCard类

    publicclass IdCard{
    
         private int id;
    
        private String idnumber;
    
         private Person person;
    
    }

    映射文件

    <hibernate-mapping>
    	<class name="com.wsz.entity.Id_Card" table="t_idcard">
    		<id name="id">	
    			<generator class="native" />
    		</id>
    		<property name="idnumber" />
    		   <one-to-one name="person"></one-to-one>
    	</class>
    </hibernate-mapping>

    三、一对一唯一外键关联映射-单向(Person---->IdCard)

     注意: 一对一唯一外键关联映射 是 多对一关联映射的特例

     可以采用<many-to-one>标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一

    person.hbm.xml

    <class name="com.bjsxt.hibernate.Person" table="t_person">
       <id name="id">
        <generator class="native"/>
       </id>
       <property name="name"/>
       <!--数据库中person中会有一个idCard字段作为外键 参照 IdCard的主键-->
       <many-to-one name="idCard" unique="true"/>
      </class>

    IdCard.hbm.xml

    <hibernate-mapping>
    	<class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
    		<id name="id">
    			<generator class="native"/>
    		</id>
    		<property name="cardNo"/>
    	</class>
    </hibernate-mapping>

    四、一对一唯一外键关联映射--双向关联  (Person<---->IdCard)

     一对一唯一外键关联双向,需要在另一端(idcard),添加<one-to-one>标签,指示hibernate如何加载其关联对象,
     默认根据idcard主键 --> person主键加载person,外键关联映射中,因为两个实体采用的是person的外键维护的关系,所以不能根据person主键加载person,而要根据idcard主键 --> person的外键加载person,所以采用如下映射方式: <one-to-one name="person" property-ref="idCard"/> 

    Person.hbm.xml

    <hibernate-mapping>
    	<class name="com.bjsxt.hibernate.Person" table="t_person">
    		<id name="id">
    			<generator class="native"/>
    		</id>
    		<property name="name"/>
    		<many-to-one name="idCard" unique="true"/>
    	</class>
    </hibernate-mapping>

    IdCard.hbm.xml

    <class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
       <id name="id">
        <generator class="native"/>
       </id>
       <property name="cardNo"/>
       <!--one-to-one不会在数据库中加外键字段,只是告诉hibernate如何去加载关联对象
        property-ref="idCard"表示不是根据person主键加载,而是根据person的idCard字段加载
       -->
       <one-to-one name="person" property-ref="idCard"/>
      </class>




     

  • 相关阅读:
    线程操作共享变量的一点分享。
    C调用栈重温
    8051汇编命令记录。
    没事写个散列玩~
    Ubuntu切换root用户权限
    CEdit自动换行和状态栏添加
    基于原始套接字的嗅探器
    Windows录音API学习笔记
    Windows内存管理
    C语言中tm结构体
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637196.html
Copyright © 2020-2023  润新知