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>
时间: 2024-10-09 09:41:38