• Hibernate5.2之一对一外键关联(五)


                                                     Hibernate5.2之一对一外键关联(五)

    一.简介

      上篇文章中笔者介绍了Hibernate关联关系中的一对一外键关联,本篇博客将介绍一对一外键关联。其实我们回过头想一想,外键关联其实就是一对多关联关系中将多的一方简化为一个,就是我们本文所要介绍的一对一的外键关联。

    二.外键关联

    2.1数据库表的创建

    create table people (
        id varchar2(255 char) not null, 
        name varchar2(255 char), 
        sex varchar2(255 char), 
        primary key (id)
    );
    
    create table cards (
        id varchar2(255 char) not null, 
        card_num varchar2(255 char), 
        people_id varchar2(255 char), 
        primary key (id)
    );

    2.2 hbm文件的方式

    public class People {
        private String id;
        private String name;
        private String sex;
        private IdCard idCard;
    
        //setter and getter
    }
    
    public class IdCard {
        private String id;
        private String cardNum;
        private People people;
        
        //setter and getter
    }

    People.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
        <class name="com.demo.hibernate.one2one.People" table="people">
            <id name="id" type="string">
                <generator class="uuid"></generator>
            </id>
            
            <property name="name" type="string" column="name"></property>
            <property name="sex" type="string" column="sex"></property>
            
            <one-to-one name="idCard" class="com.demo.hibernate.one2one.IdCard" cascade="all" property-ref="people"></one-to-one>
        </class>
    </hibernate-mapping>

    IdCard.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
        <class name="com.demo.hibernate.one2one.IdCard" table="cards">
            <id name="id" type="string" column="id">
                <generator class="uuid"></generator>
            </id>
        
            <property name="cardNum" type="string" column="card_num"></property>
            <many-to-one name="people" class="com.demo.hibernate.one2one.People" column="people_id" unique="true"></many-to-one>
        </class>
    </hibernate-mapping>

    2.3 注解的方式

    People.java

    @Entity
    @Table(name="people")
    public class People {
        
        @Id
        @Column(name="id")
        @GenericGenerator(name="uuidGenerator", strategy="uuid")
        @GeneratedValue(generator="uuidGenerator")
        private String id;
        
        @Column(name="name")
        private String name;
        
        @Column(name="sex")
        private String sex;
        
        @OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.LAZY, mappedBy="people")
        private IdCard idCard;
    
        //setter and getter
    }

    IdCard.java

    @Entity
    @Table(name="cards")
    public class IdCard {
        
        @Id
        @Column(name="id")
        @GenericGenerator(name="uuidGenerator", strategy="uuid")
        @GeneratedValue(generator="uuidGenerator")
        private String id;
        
        @Column(name="card_num")
        private String cardNum;
        
        @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="people_id")
        private People people;
        
        //setter and getter
    }

    2.4 代码测试

    A.保存

    @Test
    public void save(){
        Transaction tx = session.beginTransaction();
        People people = new People();
        people.setName("AAA");
        people.setSex("男");
            
        IdCard idCard = new IdCard();
        idCard.setCardNum("889900");
        idCard.setPeople(people);
            
        people.setIdCard(idCard);
        session.save(people);
            
        tx.commit();
    }

    B.get

    @Test
    public void get(){
        People people = session.get(People.class, "402882e6564a70fa01564a70fbd40000");
        System.out.println("此时已经发送了SQL语句");
        System.out.println(people.getName() + "::" + people.getSex());
        IdCard idCard = people.getIdCard();
        System.out.println(idCard.getCardNum());
    }

    C.load

    @Test
    public void load(){
        People people = session.load(People.class, "402882e6564a70fa01564a70fbd40000");
        System.out.println("此时没有发送任何的SQL语句");
        System.out.println(people.getName() + "::" + people.getSex());
        System.out.println("=============");
        IdCard idCard = people.getIdCard();
        System.out.println(idCard.getCardNum());
    }

    D.delete

    @Test
    public void delete(){
        People people = new People();
        people.setId("402882e6564a7c1501564a7c16d80000");
            
        IdCard card = new IdCard();
        card.setId("402882e6564a7c1501564a7c16e50001");
            
        people.setIdCard(card);
        Transaction tx = session.beginTransaction();
        session.delete(people);
        tx.commit();
    }

    E.update

    @Test
    public void update(){
        Transaction tx = session.beginTransaction();
        People people = new People();
        people.setId("402882e6564a70fa01564a70fbd40000");
        people.setName("YYYY");
        people.setSex("男");
        session.update(people);
        tx.commit();
    }
  • 相关阅读:
    #ifdef的用法
    修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法
    没有找到libufun.lib,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
    JAVA安卓和C# 3DES加密解密的兼容性问题
    使用 Repeater 控件,每隔N条数据输出另外的格式
    Forms表单登陆,动态获取web.config里面的cookies配置
    SQL Server中索引使用及维护
    动态绑定easyui datagrid列名
    Spring Hibernate多数据源配置
    SSH异常处理
  • 原文地址:https://www.cnblogs.com/miller-zou/p/5729800.html
Copyright © 2020-2023  润新知