本帖最后由 大山哥哥 于 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();
}
|
|