
对象的三种状态
瞬时状态:
实体 没有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();
} }
UserDao.java
对象经历了三种状态的改变
//存储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会话中。
对象三种状态的转变