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