• 012一对一 唯一外键关联映射_双向(one-to-one)


    ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号)

    ²  有两种策略可以实现一对一的关联映射

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

    实例场景:人<—-> 身份证号(Person<->IdCard)双向:互相持有对方的引用

    对象模型(唯一外键关联映射-双向):

    IdCard实体类:

    public class IdCard {
    
        private int id;
    
        private String cardNo; 
    
        private Person person; //持有Person对象的引用
    
        public int getId() {
    
            return id;
    
        }
    
        public void setId(int id) {
    
            this.id = id;
    
        }
    
        public String getCardNo() {
    
            return cardNo;
    
        }
    
        public void setCardNo(String cardNo) {
    
            this.cardNo = cardNo;
    
        }
    
        public Person getPerson() {
    
            return person;
    
        }
    
        public void setPerson(Person person) {
    
            this.person = person;
    
        }
    
    }

    Person实体类:

    public class Person {
    
        private int id;
    
        private String name;   
    
        private IdCard idCard;//持有IdCard对象的引用
    
        public int getId() {
    
            return id;
    
        }
    
        public void setId(int id) {
    
            this.id = id;
    
        }
    
        public String getName() {
    
            return name;
    
        }
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
        public IdCard getIdCard() {
    
            return idCard;
    
        }
    
        public void setIdCard(IdCard idCard) {
    
            this.idCard = idCard;
    
        }
    
    }

    Person实体类映射文件:

    <hibernate-mapping>
    
        <class name="com.wjt276.hibernate.Person" table="t_person">
    
            <id name="id" column="id">
    
                <generator class="native"/>
    
            </id>
    
            <property name="name"/> 
    
    <!-- <many-to-one>:在多的一端(当前Person一端),加入一个外键(当前为idCard)指向一的一端(当前IdCard),但多对一 关联映射字段是可以重复的,所以需要加入一个唯一条件unique="true",这样就可以此字段唯一了。-->
    
            <many-to-one name="idCard" unique="true"/>
    
        </class>
    
    </hibernate-mapping>

    IdCard实体类映射文件:

    <hibernate-mapping>
    
        <class name="com.wjt276.hibernate.IdCard" table="t_idcard">
    
            <id name="id" column="id">
    
                <generator class="native"/>
    
            </id>
    
            <property name="cardNo"/>
    
            <!--
    
                <one-to-one>标签:告诉hibernate如何加载其关联对象
    
                property-ref属性:是根据哪个字段进行比较加载数据
    
             -->
    
            <one-to-one name="person" property-ref="idCard"></one-to-one>
    
        </class>
    
    </hibernate-mapping>

    总结:

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

    <!--
    
                <one-to-one>标签:告诉hibernate如何加载其关联对象
    
                property-ref属性:是根据哪个字段进行比较加载数据
    
             -->
    
            <one-to-one name="person" property-ref="idCard"></one-to-one>
     
  • 相关阅读:
    字符串----不可重叠的最长重复子串
    字符串----最长重复子串
    字符串----HDU-1358
    字符串----hiho字符串(尺取法)
    字符串匹配(二)----KMP算法
    字符串匹配(一)----Rabin-Karp算法
    字符串----最短摘要生成(尺取法)
    【Hibernate 检索策略】
    【Hibernate 多表查询】
    【Hibernate QBC】
  • 原文地址:https://www.cnblogs.com/crazylqy/p/4078059.html
Copyright © 2020-2023  润新知