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

一对一的关系:人----身份证

在关系型数据库中有一种一对一的关系。类似于上面的这种情况。一个人只对应一个身份证。
反之亦然。那么在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值。

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值