浅谈Hibernate中对象的状态
        【摘要】 前言上篇博客我简单介绍了Hibernate的基本概念和然后创建一个hibernate项目、核心配置文件以及对象的增删改查,博客传送门:浅谈对象关系映射框架Hibernate接着这篇文章来说说Hibernate中实体类对象的三种状态在Hibernate中,实体类对象有3种状态,瞬时态、托管态、持久态。 瞬时态:瞬时态对象没有id值(主键值),与session对象没有关联 托管态:托管态对象有i...
    
    
    
    前言
上篇博客我简单介绍了Hibernate的基本概念和然后创建一个hibernate项目、核心配置文件以及对象的增删改查,博客传送门:浅谈对象关系映射框架Hibernate
接着这篇文章来说说Hibernate中实体类对象的三种状态
 在Hibernate中,实体类对象有3种状态,瞬时态、托管态、持久态。 
- 瞬时态:瞬时态对象没有id值(主键值),与session对象没有关联
- 托管态:托管态对象有id值(主键值),与session对象没有关联
- 持久态:持久态对象有id值(主键值),与session对象有关联
 使用savaOrUpdate()测试不同对象所执行的操作
1、瞬时态
@Test 
public void testSaveOrUpdate() {
 SessionFactory sessionFactory = HibernateUtils.getSessionFactory(); 
Session session = sessionFactory.openSession(); 
// 瞬时态对象:既没有主键值(id值),也与session对象没有关联 
User user = new User(); 
user.setUsername("yunqinanhai"); 
user.setAddress("湖北");
 session.saveOrUpdate(user); // 对于瞬时态对象,savaOrUpdate方法执行的是添加操 作
session.close(); 
sessionFactory.close(); }使用单元测试test测试后,结果如下,可以看出成功插入进了数据库

2、托管态
@Test 
public void testSaveOrUpdate() { 
SessionFactory sessionFactory = HibernateUtils.getSessionFactory(); 
Session session = sessionFactory.openSession(); 
Transaction transaction = session.beginTransaction(); // 托管态对象:对象有主键值(id值),但与session对象没有关联 
User user = new User(); 
user.setUid(2); 
user.setUsername("huawei"); 
user.setAddress("深圳"); // 对于托管态对象,saveOrUpdate方法执行的是修改操作,但是必须添加事务,同时要保证主 键值(id值)在数据库表中已存在 session.saveOrUpdate(user);
 transaction.commit(); 
session.close(); 
sessionFactory.close(); 
}测试结果如下

3、持久态
@Test
 public void testSaveOrUpdate() {
 SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// 持久态对象:对象有主键值(id值),同时与session对象有关联
 User user = session.get(User.class, 2); 
user.setUsername("华为云"); 
session.saveOrUpdate(user); // 对于持久态对象,saveOrUpdate方法执行的是修改操 作,同时必须添加事务
 transaction.commit(); 
session.close(); 
sessionFactory.close(); 
}测试结果 可以看出hibernate底层自动帮我们生成了sql语句,并将id为2 的name属性改为了 华为云

总结
最后回顾一下,在Hibernate中,实体类对象有3种状态,瞬时态、托管态、持久态。
- 瞬时态对象没有id值(主键值),与session对象没有关联
- 托管态:托管态对象有id值(主键值),与session对象没有关联
- 持久态:持久态对象有id值(主键值),与session对象有关联
感恩能与大家在华为云遇见!希望能与大家一起在华为云社区共同成长。
            【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)