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 , 没有关联
- 		
- 		
- }
