Hibernate——(3)主键生成策略&持久化类的三种状态

一 持久化类

1.持久化:内存对象--->数据库(硬盘)Hibernate持久化的框架

持久化类:Java对象与数据库中的表建立映射关系            Hibernate就称为持久化类(Java类+映射文件

2.编写规则:

二 主键生成策略

1.主键分类:

代理主键更合理

2.生成策略

测试:

//测试主键生成策略
public class Demo {

	@Test
	//保存客户
	public void fun1(){
		//1 获得session
		Session session = HibernateUtils.openSession();
		//2 控制事务
		Transaction tx = session.beginTransaction();
		//3执行操作
		Customer c = new Customer();
		c.setCust_name("王东");
		
		session.save(c);
		
		//4提交事务.关闭资源
		tx.commit();
		session.close();
		
		
	}
}

increment     单线程(数据库中的表不能是自增用的是Hibernate的自增)

public class Demo {

	@Test
	//保存客户
	public void fun1(){
		//1 获得session
		Session session = HibernateUtils.openSession();
		//2 控制事务
		Transaction tx = session.beginTransaction();
		//3执行操作
		Customer c = new Customer();
		c.setCust_name("联想");
		
		session.save(c);
		
		//4提交事务.关闭资源
		tx.commit();
		session.close();
		
		
	}
	@Test
	//保存客户
	public void fun2(){
		//1 获得session
		Session session = HibernateUtils.openSession();
		//2 控制事务
		Transaction tx = session.beginTransaction();
		//3执行操作
		Customer c = new Customer();
		c.setCust_name("苹果");
		
		session.save(c);
		
		//4提交事务.关闭资源
		tx.commit();
		session.close();
		
		
	}
}

两个线程都会执行此语句,查到相同的最大id  在存储的时候就会报错

 

三 持久化类的三种状态

1.三种状态:

瞬时态transient

无oid 无session管理的对象

有oid 有session管理的对象

有oid无session管理的对象

session管理:调session的方法把对象交给session管理

oid:唯一的标识,在DB中有主键id

//测试对象的三种状态
public class Demo {

	@Test
	//查看三种状态
	public void fun1(){
		//1 获得session
		Session session = HibernateUtils.openSession();
		//2 控制事务
		Transaction tx = session.beginTransaction();
		//3执行操作
		Customer c = new Customer(); // 没有id, 没有与session关联 => 瞬时状态
		
		c.setCust_name("联想"); // 瞬时状态
		
		session.save(c); // 持久化状态, 有id,有关联(返回id)下面直到session关闭之前的状态都是持久态
		
		//4提交事务.关闭资源
		tx.commit();
		session.close();// 游离|托管 状态, 有id , 没有关联
		
	}
	
}

2.三种状态的转换:

持久态对象可以自动更新数据库

不需要调用session.update(obj)就可以自动更新数据库

原理:依赖了Hibernate的一级缓存

@Test
	//三种状态特点
	// 持久化状态特点: 持久化状态对象的任何变化都会自动同步到数据库中.
	public void fun3(){
		//1 获得session
		Session session = HibernateUtils.openSession();
		//2 控制事务
		Transaction tx = session.beginTransaction();
		//3执行操作
		
		Customer c = session.get(Customer.class, 1l);//持久化状态对象
		
		c.setCust_name("微软公司");
		
		//4提交事务.关闭资源
		tx.commit();
		session.close();// 游离|托管 状态, 有id , 没有关联
		
		
	}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智达教育‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值