1、One To One 单相
背景:
古代一个老婆 只能关联一个老公
husband.java
package com.rhythmk.model;
public class husband {
public Integer getHusbandId() {
return husbandId;
}
public void setHusbandId(Integer husbandId) {
this.husbandId = husbandId;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
private Integer husbandId;
private String Name;
}
hasband.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rhythmk.model">
<class name="husband" table="t_husband">
<id name="husbandId" type="int">
<column name="husbandId" />
<generator class="native" />
</id>
<property name="Name" type="string">
</property>
</class>
</hibernate-mapping>
wife.java
package com.rhythmk.model;
public class wife {
private Integer wifeId;
private String name;
public Integer getWifeId() {
return wifeId;
}
public void setWifeId(Integer wifeId) {
this.wifeId = wifeId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public husband getHb() {
return hb;
}
public void setHb(husband hb) {
this.hb = hb;
}
private husband hb;
@Override
public String toString() {
return "wife [wifeId=" + wifeId + ", name=" + name + ", hb=" + hb + "]";
}
}
wife.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.rhythmk.model">
<class name="wife" table="t_wife">
<id name="wifeId" type="int">
<column name="wifeId" />
<generator class="native" />
</id>
<property name="Name" type="string">
</property>
<!-- one to one 类似于 one to many 只需要添加 unique =true 即可 -->
<many-to-one name="hb" column="husbandId" ></many-to-one>
</class>
</hibernate-mapping>
注意:
one to one 类似于 one to many 只需要添加 unique =true 即可
2、One To One 双向
跟单相查不多 就是两边都配上 many to one
调整 hasband.hbm.xml 添加:
<!-- one to one 类似于 one to many 只需要添加 unique =true 即可 -->
<many-to-one name="mywife" column="wifeId" ></many-to-one>
调整 husband.java :
public wife getMywife() {
return mywife;
}
public void setMywife(wife mywife) {
this.mywife = mywife;
}
private wife mywife;
测试:
@Test
public void test02_add() {
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
husband hb = new husband();
hb.setName("王大1");
wife w = new wife();
w.setName("张妞 2");
w.setHb(hb);
hb.setMywife(w);
session.save(hb);
session.save(w);
System.out.println(w.toString());
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null)
session.close();
}
}
输出:
Hibernate: insert into t_husband (Name, wifeId) values (?, ?)
Hibernate: insert into t_wife (Name, husbandId) values (?, ?)
wife [wifeId=6, name=张妞 2, hb=com.rhythmk.model.husband@8b677f]
Hibernate: update t_husband set Name=?, wifeId=? where husbandId=?
代码下载地址:
http://pan.baidu.com/s/1gdFt7ur