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>
转载于:https://blog.51cto.com/yjm199/1639575