一对一的关系:人----身份证
在关系型数据库中有一种一对一的关系。类似于上面的这种情况。一个人只对应一个身份证。
反之亦然。那么在hibernate的对象模型中是怎么样去配置关联一对一的这种映射关系呢?
1、 JavaBean:(省略set和get方法)
1、Person.java
private int id;
private String name;
private IdCard idcard;
2、IdCard.Java
private int id;
private String usetime;
private Person person;
2、 Xml配置文件:不难看出上面的两个类互相有对方的一个属性形式,那么hibernate的xml文件如下:
Person.hbm.xml
<hibernate-mapping
package="cn.hibernate.model">
<class name="Person" table="person">
<id name="id">
<generator class="native" />
</id>
<property name="name" column="name"/>
<!-- 一对一的对象关系描述 -->
<one-to-one name="idcard" />
</class>
</hibernate-mapping>
IdCard.hbm.xml
<hibernate-mapping
package="cn.hibernate.model">
<class name="IdCard" table="idcard">
<id name="id">
<!-- 这里的主键同时也是外键
由于它是和peroson并存的。所以这里的主键这么配置
-->
<generator class="foreign" >
<!-- 说明主键从哪里来 。这个person指的是它的对象属性-->
<param name="property">person</param>
</generator>
</id>
<property name="usetime" column="usetime" />
<!-- 一对一的关系只要用指定属性的名称即可 -->
<one-to-one name="person" constrained="true"></one-to-one>
</class>
</hibernate-mapping>
3、 生成表的插入操作:
static void AddPersonAndIdCard(){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx = s.beginTransaction();
Person p = new Person();
IdCard idcard = new IdCard();
p.setName("zhanglei");
idcard.setUsetime("usertime");
idcard.setPerson(p);
p.setIdcard(idcard);
s.save(p);
s.save(idcard);
tx.commit();
System.out.println("1111");
}catch(HibernateException e){
//判断事务有没有完全提交的判断方式
if(tx != null){
tx.rollback();
throw e;
}
}finally{
if(s != null){
s.close();
}
}
}
//注意:
/*
对于上文中的Java代码中有一些自定义的类。拿到session对象。如果想看封装类的话请看前面的BLOG
本文中要注意的地方主要是对于idcard的一个setPerson的操作。这个操作是不可以没有的。因为它的ID生成依赖person的ID值。
*/
Hibernate入门BLOG[七、Hibernate对象关系一对一映射]
最新推荐文章于 2020-12-20 08:42:10 发布