单向之一对一
举例:公民和身份证,一个公民对应一张身份证
1、工具类:HibernateUtil
public class HibernateUtilEX {
private static Configuration configuration = null;
private static SessionFactory sessionFactory = null;
// 本地化线程、
private static ThreadLocal<Session> localSession = null;
static {
try {
// 加载Hibernate配置文件(默认加载bihernate.cfg.xml)
configuration = new Configuration().configure();
// 获取SessionFactory工厂对象
sessionFactory = configuration.buildSessionFactory();
localSession = new ThreadLocal<Session>();
} catch (Exception e) {
System.out.println("加载hibernate映射文件失败");
e.printStackTrace();
}
}
/**
* 得到Session对象
*
* @return Session
*/
public static Session openSession() throws HibernateException {
// 底层有一个Map<k,V>,K:线程ID,V:session ,一个线程绑定一个session
Session session = localSession.get();
if (session == null) {
session = sessionFactory.openSession();
localSession.set(session);
}
return session;
}
/**
* 关闭Session
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = localSession.get();
if (session != null) {
session.close();
}
localSession.set(null);
}
}
2、公民实体类:CitizenEntity
public class CitizenEntity {
private int id;
private String name;
private int age;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "CitizenEntity [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
配置文件:CitizenEntity
<?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 package="com.zh.entity">
<class name="CitizenEntity" table="t_citizen">
<!-- 映射标识属性(属性) -->
<id name="id" column="citizen_id" type="int">
<!-- 主键生成策略(自增主键) -->
<generator class="native" />
</id>
<!-- 映射普通属性 -->
<property name="name" column="name"></property>
<property name="age" column="age"></property>
</class>
</hibernate-mapping>
省份证实体类:IdCardEntity.hbm.xml
public class IdCardEntity {
private int id;
private String sn; //编号
private int validDate; //有效期
private CitizenEntity citizen; //公民
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public int getValidDate() {
return validDate;
}
public void setValidDate(int validDate) {
this.validDate = validDate;
}
public CitizenEntity getCitizen() {
return citizen;
}
public void setCitizen(CitizenEntity citizen) {
this.citizen = citizen;
}
@Override
public String toString() {
return "IdCardEntity [id=" + id + ", sn=" + sn + ", validDate=" + validDate + ", citizen=" + citizen + "]";
}
}
配置文件:IdCardEntity.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 package="com.zh.entity">
<class name="IdCardEntity" table="t_IDCard">
<!-- 映射标识属性(属性) -->
<id name="id" column="id" type="int">
<!-- 主键生成策略(自增主键) -->
<generator class="native" />
</id>
<!-- 映射普通属性 -->
<property name="sn" column="sn"></property>
<property name="validDate" column="validDate"></property>
<!-- unique="true" 设置唯一约束 -->
<many-to-one name="citizen" class="CitizenEntity" column="citizen_id" unique="true"></many-to-one>
</class>
</hibernate-mapping>
3、在总配置文件hibernate.cfg.xml里添加配置映射文件
4、创建测试类:HibernateTest**
public class HibernateTest {
public static void main(String[] args) {
HibernateTest test=new HibernateTest();
test.singleOneToOne();
}
//单向一对一测试
public void singleOneToOne() {
//开启会话
Session session=HibernatUtil.getSession();
//打开事物
Transaction transaction=session.beginTransaction();
/**
* 创建公民实体
*/
CitizenEntity citizenEntity=new CitizenEntity();
citizenEntity.setName("王五");
citizenEntity.setAge(22);
session.persist(citizenEntity);
/**
* 创建身份证实体
*/
IdCardEntity cardEntity=new IdCardEntity();
cardEntity.setSn("511025199900006789");
cardEntity.setValidDate(20);
cardEntity.setCitizen(citizenEntity);
//保存到数据库
session.persist(cardEntity);
//事物提交
transaction.commit();
//关闭会话
HibernatUtil.closeSession(session);
}
}
创建完成!