Hibernate(四)之对象状态及一级缓存
2017-04-07 20:46
302 查看
一、Hibernate中的对象状态
1.1、瞬时态(临时态)
没有与Hibernate产生关联与数据库中的记录没有产生关联(有关联就是与数据库中表的id相对应)
获得:一般都只直接创建(new)
瞬时态 转换 持久态
一般操作:save方法、saveOrUpdate
瞬时态 转换 脱管态
一般操作:通过setId方法设置数据
1.2、持久态
Hibernate有关联对象有id
获得:
查询操作:get、loat、createQuery、createCriteria 等 获得都是持久态【】
执行save之后持久态
执行update之后持久态
持久态 转换 瞬时态
官方规定执行delete() --民间:删除态
持久态 转换 脱管态
session没有记录
session.close () 关闭
session.clear() 清除所有
session.evict(obj) 清除指定的PO对象
1.3、游离态(脱管态)
没有与Hibernate产生关联对象有ID
获得:
创建、并设置OID的
通过api获得
脱管态 转换 瞬时态
手动去除OID,设置成默认值
脱管态 转换 持久态
一般操作:update()、saveOrUpdate
1.4、在代码中去查看三种状态
import java.util.List; import org.hibernate.Session; import org.junit.Test; import com.itheima.domain.User; import com.itheima.utils.HibernateUtils; //其他API (大部分都是了解) public class Demo1 { @Test //1. evict 将缓存中的对象移除. //2. clear 清空1级缓存 public void fun1(){ Session session = HibernateUtils.openSession(); session.beginTransaction(); //------------------------------------------------ User u1 = (User) session.get(User.class, 1); session.clear(); User u2 = (User) session.get(User.class, 1); //------------------------------------------------ session.getTransaction().commit(); session.close(); // 游离状态 } @Test //3 refresh 刷新 => 强制刷新缓存中的对象 => (可以用来解决缓存与数据库数据不同步的问题) public void fun2(){ Session session = HibernateUtils.openSession(); session.beginTransaction(); //------------------------------------------------ User u1 = (User) session.get(User.class, 1); session.refresh(u1); //将缓存中的对象立刻与数据库同步,会再发送一个sql语句 //------------------------------------------------ session.getTransaction().commit(); session.close(); // 游离状态 } @Test //4 flush 对比快照,并提交缓存对象 public void fun3(){ Session session = HibernateUtils.openSession(); session.beginTransaction(); //------------------------------------------------ User u1 = (User) session.get(User.class, 1); //u1.setName("zhangsan"); session.flush();// 立刻提交session缓存中的对象到数据库 //------------------------------------------------ session.getTransaction().commit(); session.close(); // 游离状态 } @Test // 代理主键=> native //5.1 aveOrUpdate方法 //saveOrUpdate 可以同时完成保存或更新操作 //主键为空=>save //主键有值=> update public void fun4(){ Session session = HibernateUtils.openSession(); session.beginTransaction(); //------------------------------------------------ User u = new User(); u.setId(99); u.setName("jack"); u.setPassword("1234"); session.saveOrUpdate(u); //------------------------------------------------ session.getTransaction().commit(); session.close(); // 游离状态 } // 自然主键=> assigned //5 update 与 saveOrUpdate方法 //saveOrUpdate 可以同时完成保存或更新操作 //主键为空=> 报错,因为无论是save还是update 都必须指定id //主键有值=> 先会根据主键查询数据库. // 数据库中存在=> 执行update // 数据库中不存在=> 执行insert @Test public void fun5(){ Session session = HibernateUtils.openSession(); session.beginTransaction(); //------------------------------------------------ User u = new User(); u.setId(88); u.setName("jack01"); u.setPassword("1234"); session.saveOrUpdate(u); //------------------------------------------------ session.getTransaction().commit(); session.close(); // 游离状态 } @Test //在我们使用Hibernate时候,注意要避免出现,两个相同的ID对象.放入一级缓存的情况. public void fun6(){ Session session = HibernateUtils.openSession(); session.beginTransaction(); //------------------------------------------------ User u = (User) session.get(User.class, 1);// 持久化,缓存中存在 session.evict(u); // 游离态,缓存中不存在 User u2 = (User) session.get(User.class, 1);// 持久化,缓存中存在 session.update(u); // 将U重新变为持久化状态,缓存中存在 //------------------------------------------------ session.getTransaction().commit(); session.close(); // 游离状态 } }
testSessionApi
相关文章推荐
- Hibernate学习(三):Session的缓存及对象的状态
- Hibernate Session篇--Hibernate的缓存及对象的状态
- hibernate(二)一级缓存和三种状态解析
- Hibernate对象状态、缓存、快照、hql语句、criteria语句、sql语句
- hibernate(二)一级缓存和三种状态解析
- hibernate 之 对象状态/缓存
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- Hibernate框架--对象的状态,缓存, 映射
- Hibernate中Session的缓存及对象的状态
- Hibernate学习笔记 -- day05 缓存、快照机制、对象状态
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- Hibernate(十三)session缓存机制和三种对象状态
- Hibernate——(5)持久化对象和一级缓存机制
- Hibernate对象状态、缓存、懒加载、映射
- 对象的三种状态(hibernate的session的get和load方法的区别,session的常用方法,session缓存)
- Hibernate缓存简介及领域对象的三种状态
- Hibernate——(5)持久化对象和一级缓存机制
- Hibernate缓存简介及领域对象的三种状态
- 实体对象的状态和Hibernate的一二级缓存及特性
- hibernate(二)一级缓存和三种状态解析