浅谈Hibernate中对象的状态

举报
运气男孩 发表于 2022/04/21 09:32:07 2022/04/21
【摘要】 前言上篇博客我简单介绍了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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。