简单来说:
就是一张身份证只能对应一个人
保护了数据的唯一性
一对一 双向
代码:tbl_email
package com.zking.entity;
public class Tbl_email {
private int id;
private String emailAddress;
private Tbl_user users;
//省略构造函数和getter/setter方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public Tbl_user getUsers() {
return users;
}
public void setUsers(Tbl_user users) {
this.users = users;
}
}
tbl_user :
package com.zking.entity;
public class Tbl_user {
private int id;
private String name;
private String pwd;
private Tbl_email email;
//省略构造函数和getter/setter方法
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 String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Tbl_email getEmail() {
return email;
}
public void setEmail(Tbl_email email) {
this.email = email;
}
}
配置文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-11-25 11:31:58 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Tbl_email" table="TBL_EMAIL">
<id name="id" type="int">
<column name="ID" />
<!-- hirbanate 进行控制 在添加主键的时候顺便添加这个 -->
<generator class="increment"/>
</id>
<property name="emailAddress" type="java.lang.String">
<column name="EMAILADDRESS" />
</property>
<one-to-one name="users" class="com.zking.entity.Tbl_user" cascade="all" lazy="false" ></one-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-11-25 11:31:58 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Tbl_user" table="TBL_USER">
<id name="id" type="int">
<column name="ID" />
<generator class="foreign">
<!-- email是User类中关联的对象 -->
<param name="property">email</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="pwd" type="java.lang.String">
<column name="PWD" />
</property>
<!-- 唯一主键关联 constrained=”true”,表示当前类的主键还是一个外键 true代表是外键-->
<one-to-one name="email" class="com.zking.entity.Tbl_email" constrained="true" cascade="all"></one-to-one>
<!-- 强制转换 一对一 -->
<!-- 一对一映射,有外键方 unique="true" 给外键字段添加唯一约束 -->
<!-- 注:unique="ture" column="p_id"表示为engine表中的外健p_id加上唯一约束,使之一对多关系强制转化为一对一关系。 -->
<!-- <many-to-one name="Persons" class="com.sunline.entity.Person" unique="true" column="p_id"></many-to-one>
<property name="PId" type="java.lang.Integer" insert="false" update="false">
<column name="p_id" not-null="true"/>
</property> -->
</class>
</hibernate-mapping>
然后将你自己写的配置文件导入config.xml
<!-- 一对多 多对一 -->
<mapping resource="com/zking/entity2/Order.hbm.xml"/>
<mapping resource="com/zking/entity2/OrderItem.hbm.xml"/>
测试:
/**
* 双向一对一
*/
@Test
public void oneToOne() {
SessionFactory factory = new Configuration().configure().buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
/* Tbl_user tbl_user = session.get(Tbl_user.class, 8);
System.out.println(tbl_user.getId());
System.out.println(tbl_user.getEmail().getEmailAddress());*/
/*Tbl_user tUser=new Tbl_user();
Tbl_email em=new Tbl_email();
tUser.setName("徐佳慧");
tUser.setPwd("1234");
em.setEmailAddress("第3@qq.com");
em.setUsers(tUser);
tUser.setEmail(em);
session.save(tUser);*/
//删除>是不是级联删除
/* Tbl_user tb=new Tbl_user();
Tbl_email em=new Tbl_email();
tb.setId(10);
em.setId(10);
tb.setEmail(em);
session.delete(tb);*/
/*Tbl_email tbs=new Tbl_email();
tbs.setId(10);
session.delete(tbs);*/
//修改单个 可以成功
/* Tbl_user tb=new Tbl_user();
tb.setId(8);
tb.setName("Dh");
tb.setPwd("1234");
session.update(tb);*/
session.getTransaction().commit();
}