Hibernate中双向一对一保存数据的问题

private static void test10() {
		// 获得session 对象
		SessionFactory sessionFactory = new Configuration().configure()
				.buildSessionFactory();
		Session session = sessionFactory.openSession();
		// session开启事务
		session.beginTransaction();
		// 创建 一对一 对象数据
		PersonInfo personinfo = new PersonInfo();
		personinfo.setPerAge("perage");
		One2One one2one = new One2One();
		one2one.setTest2("one2one");
		// one2one 主键值来自外部 personinfo的主键值 并且作为personinfo 主键的外键

		// 向personinfo 设置one2one 数据 不设置 保存personinfo 不创建one2one 的记录
		personinfo.setOne2one(one2one);
		// 设置 one2one personinfo的数据,one2one 的主键值 从 personinfo对象里获得设置
		one2one.setpersonInfo(personinfo);
		// 保存personinfo对象 如果设置 成员变量 one2one的值 则会向 one2one表里 插入一条记录否则
		// 只插入personinfo表一条记录
		session.save(personinfo);
		// 刷新session
		session.flush();
		// 关闭事务
		session.getTransaction().commit();

	}


运行结果

Hibernate: insert into personinfo (perName, perSex, perAge, perPhone, PerAddress, perJob, perEntryTime, PerDeparturetime, perCreateDate, perLastModifyDate, perId) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Hibernate: insert into one2one (test1, test2, test3, test4) values (?, ?, ?, ?)



由于是双向关联 所以两边的xml 配置 <one-to-one> 可以是任意替换的。任何一个类都可以作为主表与另一个表做映射

personinfo

	<one-to-one name="one2one" class="com.yjm.pojo.person.One2One"
			fetch="join" cascade="all">
		</one-to-one>

one2one

	<id name="test4" type="java.lang.String">
			<generator class="foreign">
				<param name="property">personInfo</param>
			</generator>
		</id>	
		<one-to-one name="personInfo"></one-to-one>


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。