JavaWeb_(Hibernate框架)Hibernate中对象的三种状态
Posted Cynical丶Gary
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb_(Hibernate框架)Hibernate中对象的三种状态相关的知识,希望对你有一定的参考价值。
对象的三种状态
瞬时状态:
实体 没有id.没有与session关联
持久化状态:
特点:持久化状态对象的任何改变都会同步到数据库中
游离态【也称作托管态】:
实体 有id,没有与session关联
Hibernate向数据库中增加用户调用addUser()方法时
//增加用户 public void addUser() { //得到配置信息 Configuration config = new Configuration().configure(); //创建sessionFactiory对象 SessionFactory sessionFactory = config.buildSessionFactory(); //获取session Session session = sessionFactory.openSession(); //打开事务 Transaction transcation = session.beginTransaction(); User user = new User(); // =>没有id, 没有与session关联 瞬时状态 user.setName("Gary"); //=>没有id, 没有与session关联 瞬时状态 //存储user对象 session.save(user); //有id,与session关联 持久化状态 //提交事务 transcation.commit(); //关闭资源 session.close(); //没有与session关联,有id }
package com.Gary.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.Gary.domain.User; public class UserDao { //增加用户 public void addUser() { //得到配置信息 Configuration config = new Configuration().configure(); //创建sessionFactiory对象 SessionFactory sessionFactory = config.buildSessionFactory(); //获取session Session session = sessionFactory.openSession(); //打开事务 Transaction transcation = session.beginTransaction(); //存储user对象save 只是为了生成id //有id,与session有关联,持久化状态 User user = new User(); // =>没有id, 没有与session关联 瞬时状态 user.setName("Gary"); //=>没有id, 没有与session关联 瞬时状态 //存储user对象 session.save(user); //有id,与session关联 持久化状态 本质:对象状态的转换 //将瞬时->持久 目的:生成id System.out.println(user.getId()); System.out.println("////////////////////////////////////////"); //提交事务 transcation.commit(); //关闭资源 session.close(); //没有与session关联,有id } //删除用户 public void deleteUser() { Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session session = factory.openSession(); Transaction transcation = session.beginTransaction(); //得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象 User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); session.delete(user); transcation.commit(); session.close(); } //修改用户 public void ChangeUser() { //读取hibernate.cfg.xml Configuration config = new Configuration().configure(); //获取sessionFactory工厂 SessionFactory factory = config.buildSessionFactory(); //获取session Session session = factory.openSession(); //开启事务 Transaction transaction = session.beginTransaction(); //根据id,得到session User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); //修改名字,将对象改名为lGary user.setUsername("lGary"); //更新数据库中的值 session.update(user); //提交事务 transaction.commit(); //关闭session session.close(); } //查询用户 public void findUser() { Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session openSession = factory.openSession(); Transaction transaction = openSession.beginTransaction(); User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); System.out.println(user); transaction.commit(); openSession.close(); } }
对象经历了三种状态的改变
//存储user对象save 只是为了生成id User user = new User(); // =>没有id, 没有与session关联 瞬时状态 user.setName("Gary"); //=>没有id, 没有与session关联 瞬时状态 //存储user对象 session.save(user); //有id,与session关联 持久化状态 本质:对象状态的转换 //将瞬时->持久 目的:生成id
瞬时态指New 新建的一个对象,没有放在Session时,也没有存储在数据库中。
持久态,指这个对象存储在数据库中,并且存在于Session会话中。
而游离态指的是,这个对象存储在数据库中,但已经不存在于Session会话中。
对象三种状态的转变
以上是关于JavaWeb_(Hibernate框架)Hibernate中对象的三种状态的主要内容,如果未能解决你的问题,请参考以下文章
JAVAWEB开发之Hibernate详解——Hibernate的框架概述开发流程CURD操作和核心配置与API以及Hibernate日志的使用