单向的:
javabean如下:
/** * * 单向基于主键的一对一 主控端 对象模型中的身份证 */ public class IDCard { private Integer id; private String no; //主控端引用被控端的对象 private Citizen citizen; //引用citizen表的主键 public IDCard(){ } /** * @return the id */ public Integer getId() { return id; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @return the no */ public String getNo() { return no; } /** * @param no the no to set */ public void setNo(String no) { this.no = no; } /** * @return the citizen */ public Citizen getCitizen() { return citizen; } /** * @param citizen the citizen to set */ public void setCitizen(Citizen citizen) { this.citizen = citizen; } }
</pre><pre code_snippet_id="1632008" snippet_file_name="blog_20160401_4_9620953" name="code" class="java"><pre name="code" class="java">/** * * 单向基于主键的一对一 被控端 公民 */ public class Citizen { private int id; private String name; public Citizen(){ } /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } }
映射文件:
<pre name="code" class="html"><?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="IDCard" table="idcard_tab1"> <!-- 生成对象唯一的OID标示符 --> <id name="id"> <generator class="foreign"> <param name="property">citizen</param> </generator> </id> <property name="no"/> <!-- constrained 告诉当前主键,你的值时采用另个表中的主键的值 当前主键对于有关系的另一个表来说就是外键。 --> <one-to-one name="citizen" constrained="true"></one-to-one> </class> </hibernate-mapping>
</pre><pre code_snippet_id="1632008" snippet_file_name="blog_20160401_8_3655162" name="code" class="html"><?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Citizen" table="citizen_tab1"> <!-- 生成对象唯一的OID标示符 --> <id name="id" column="id" type="integer"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
生成的数据库表:
双向主键一对一:
使用双向,先保存谁都可以,因为互相都知道彼此是存在的
javabean:
/** * @author * 双向基于主键的一对一 主控端 对象模型中的身份证 */ public class IDCard { private Integer id; private String no; //主控端引用被控端的对象 private Citizen citizen; public IDCard(){ } /** * @return the id */ public Integer getId() { return id; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @return the no */ public String getNo() { return no; } /** * @param no the no to set */ public void setNo(String no) { this.no = no; } /** * @return the citizen */ public Citizen getCitizen() { return citizen; } /** * @param citizen the citizen to set */ public void setCitizen(Citizen citizen) { this.citizen = citizen; } }
/** * @author * 双向的基于主键的一对一 被控端 公民 */ public class Citizen { private int id; private String name; private IDCard idCard; public Citizen(){ } /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } public void setIdCard(IDCard idCard) { this.idCard = idCard; } public IDCard getIdCard() { return idCard; } }
映射文件:
就是主控端依赖被控端生成的id
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.entity.Citizen" table="citizen_tab2"> <!-- 生成对象唯一的OID标示符 --> <id name="id" column="id" type="integer"> <generator class="native"/> </id> <property name="name"/> <!-- 建立一对一关系 --> <one-to-one name="idCard" /> </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"> <hibernate-mapping> <class name="com.entity.IDCard" table="idcard_tab2"> <!-- 生成对象唯一的OID标示符 --> <id name="id"> <generator class="foreign"> <param name="property">citizen</param> </generator> </id> <property name="no"/> <!-- constrained 告诉当前主键,你的值时采用另个表中的主键的值 当前主键对于有关系的另一个表来说就是外键。 --> <one-to-one name="citizen" constrained="true"></one-to-one> </class> </hibernate-mapping>建立的数据库表结构: