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

猜你喜欢

转载自blog.csdn.net/qq_29235677/article/details/88568097