A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 大山哥哥 于 2018-4-28 17:09 编辑

在多表的关系中,整体来看,是分为1对1,1对多,和多对多三种映射关系,那么今天就来和大家说下在配置多表关系的时候,1对1具体的步骤和特别的注意事项吧~


首先,先来给大家举几个1对1在实际应用中最直接的体现的例子吧~

    身份证
        一个身份证绑定一个用户
    用户
        一个用户对应有一个身份证

那么在1对1在表结构的设置中可以分为以下两种方式
        
    一对一操作有两种映射方式:
            1.        在任意一方添加外键
            2.        主键映射
        
当然,在这里就给大家说下最简单也是最长用的一种

外键形式操作一对一(在一种一个表中设置外键绑定到另一张表的主键),这里我们就以身份证和用户为例写一个简单的demo吧~~~

第一步:定义IDCard实体类,配置注解一对一

@Entity
@Table(name = "t_idcard")
public class IDCard {

        @Id
        @GenericGenerator(strategy = "uuid", name = "myuuid")
        @GeneratedValue(generator = "myuuid")
        private String id;
        private String cardNum;

        @OneToOne(targetEntity = User.class)
        @JoinColumn(name = "c_user_id")
        @Cascade(CascadeType.SAVE_UPDATE)
        private User user;
        
        //省略get/set方法
        ......
}

第二步:定义User实体类,配置注解一对一

@Entity
@Table(name = "t_user")
public class User {

        @Id
        @GenericGenerator(strategy = "uuid", name = "myuuid")
        @GeneratedValue(generator = "myuuid")
        private String id;
        private String name;
        @OneToOne(targetEntity = IDCard.class, mappedBy = "user")
        private IDCard idCard;
               
        //省略get/set方法
        ......
}

第三步:在配置文件中hibernate.cfg.xml中的mapping中引入映射

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

        <session-factory>
                ......
                <property name="hibernate.hbm2ddl.auto">update</property>
                -----------------------------------------
                <mapping class="com.b3a4a.one2one.User"/>
                <mapping class="com.b3a4a.one2one.IDCard"/>
                -----------------------------------------
        </session-factory>

</hibernate-configuration>        

第四步:测试用例

        @Test
        public void testOne2One() {
                Session session = HibernateUtils.openSession();
                session.beginTransaction();

                // 1.创建一个人
                User user = new User();
                user.setName("b3a4a");

                // 2.创建身份证号
                IDCard idcard = new IDCard();
                idcard.setCardNum("1234567890");

                // 3.身份证号关联人
                idcard.setUser(user);

                // 4.存储身份证号
                session.save(idcard);

                session.getTransaction().commit();
                session.close();
        }
        

1 个回复

正序浏览
我来占层楼啊   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马