Hibernate入门BLOG[七、Hibernate对象关系一对一映射]

来源:互联网 发布:骚男淘宝店铺叫什么 编辑:程序博客网 时间:2024/06/05 06:28
一对一的关系:人----身份证在关系型数据库中有一种一对一的关系。类似于上面的这种情况。一个人只对应一个身份证。反之亦然。那么在hibernate的对象模型中是怎么样去配置关联一对一的这种映射关系呢?1、JavaBean:(省略set和get方法)1、Person.javaprivate int id;private String name;private IdCard idcard;2、IdCard.Javaprivate 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值。*/