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

Hibernate中双向一对一保存数据的问题的相关文章

Hibernate中的一对一映射关系

Hibernate中的一对一映射关系有两种实现方法(一对一关系:例如一个department只能有一个manager) I使用外键的方式 步骤:1在一对一关联的持久化类中互相添加对方对象属性,   例如在department中添加private manager manager属性:   department代码如下: package com.atguigu.hibernate.one2one.foreign; public class Department { private Integer d

hibernate中使用schemaExport生成数据表报错解决方法

[解决方法] 1.hibernate中使用schemaexport生成数据表,很多教材是教你这么写的: SchemaExport schemaExport = new SchemaExport(new Configuration().configure());         schemaExport.create(true, true);   因为我们现在基本都是使用hibernate 5.x,所以当你这么写的时候,IDE会提醒你这种方法已经不推荐使用了. 2.解决方法:将以上代码改成以下代码

Hibernate中双向的一对多关系

何为双向,双向的意思就是你我之间可以互相通信(customer(1)和order(n)) 也就是说customer可以访问order,order也可以访问customer 二者构成了双向的关系 在Hibernate中如何实现双向的一对多关系呢?? 步骤: I在1的一端(也就是customer)添加n端(order)的集合列表,并添加get和set方法 package com.jeremy.hibernate.app.example.both; import java.util.HashSet;

Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过Session持久化操作,缓存中存在这个对象的数据为持久状态并且数据库中存在这个对象对应的数据为持久状态这个时候有OID. 游离状态:当Session关闭,缓存中不存在这个对象数据而数据库中有这个对象的数据并且有OID为游离状态. 注:OID为了在系统中能够找到所需对象,我们需要为每一个对象分配一个

Hibernate中的一对一关联和组件的映射

Hibernate提供了两种映射一对一映射关联关系的方式: 01.按照外键映射 02.按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映射方式分别完成以下持久化操作 (1)保存员工档案的同时分配给员工一个账号 (2)加载员工档案的同时加载账号信息 一:按照外键映射 需要提示: HibernateUtil工具类(用于获取session和关闭session) package cn.zhang.util; import org.h

hibernate中持久化类映射到数据表的注意事项。

在web项目中,我们用到hibernate的话要先在用java语言创建一个持久化的bean类,然后在映射到数据库中的表! 在这里我要说的是这个数据表的创建 应该使用SQL的DDL语言来完成,不要用management studio,我在做项目的时候用management studio建表导致id主键和java持久化类当中的id不匹配.报了很多错误,所以写此随笔作为警示. 我的栗子! 先贴我的映射文件 1 <?xml version="1.0" encoding="UTF

Unity中建立文本保存数据

public void CreateYunYD() { GameToolsManager.Instance.effectType = EFFECTTYPE.YunYD; CreateYunOrWu("Effect/yunwu-yd", Vector3.zero); } public void CreateYunZY() { GameToolsManager.Instance.effectType = EFFECTTYPE.YunZY; CreateYunOrWu("Effec

Hibernate中双向多对多的两种配置方式

1.建立多对多双向关联关系 1 package cn.happy.entitys; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Employee { 7 private Integer empid; 8 private String empname; 9 private Set<ProEmp> emps = new HashSet<ProEmp>(); 10 11 public Set

play freamwork 框架中 调用线程保存数据

package com.wanhua.thread; import models.Log;import play.db.jpa.JPAPlugin; /** * 保存用户操作日志的线程 *  * @author w_xfpenga 2014-12-18 *  */public class LogManagerThread extends Thread { private String content;// 日志内容    private int type;// 日志类型:0为后台用户操作日志,1