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

一 持久化类

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

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

2.编写规则:

二 主键生成策略

1.主键分类:

代理主键更合理

2.生成策略

测试:


 
 
  1. //测试主键生成策略
  2. public class Demo {
  3. @Test
  4. //保存客户
  5. public void fun1(){
  6. //1 获得session
  7. Session session = HibernateUtils.openSession();
  8. //2 控制事务
  9. Transaction tx = session.beginTransaction();
  10. //3执行操作
  11. Customer c = new Customer();
  12. c.setCust_name( "王东");
  13. session.save(c);
  14. //4提交事务.关闭资源
  15. tx.commit();
  16. session.close();
  17. }
  18. }

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


 
 
  1. public class Demo {
  2. @Test
  3. //保存客户
  4. public void fun1(){
  5. //1 获得session
  6. Session session = HibernateUtils.openSession();
  7. //2 控制事务
  8. Transaction tx = session.beginTransaction();
  9. //3执行操作
  10. Customer c = new Customer();
  11. c.setCust_name( "联想");
  12. session.save(c);
  13. //4提交事务.关闭资源
  14. tx.commit();
  15. session.close();
  16. }
  17. @Test
  18. //保存客户
  19. public void fun2(){
  20. //1 获得session
  21. Session session = HibernateUtils.openSession();
  22. //2 控制事务
  23. Transaction tx = session.beginTransaction();
  24. //3执行操作
  25. Customer c = new Customer();
  26. c.setCust_name( "苹果");
  27. session.save(c);
  28. //4提交事务.关闭资源
  29. tx.commit();
  30. session.close();
  31. }
  32. }

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

 

三 持久化类的三种状态

1.三种状态:

瞬时态transient

无oid 无session管理的对象

有oid 有session管理的对象

有oid无session管理的对象

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

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


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

2.三种状态的转换:

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

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

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


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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值