浅谈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)