Hibernate_6_session的管理
来源:互联网 发布:lte网络结构优化 编辑:程序博客网 时间:2024/06/07 19:36
session的管理:
1)save():把临时状态变为持久化状态(交给Sessioin管理)
Session session = sessionFactory.openSession();session.beginTransaction();// --------------------------------------------User user = new User(); // 临时状态user.setName("test");session.save(user); // 变为了持久化状态// --------------------------------------------session.getTransaction().commit();session.close();user.setName("李四"); // 游离状态System.out.println(user.getName()); // 游离状态
2)update():把游离状态变为持久化状态
在更新时,对象不存在就报错
session.clear(); // 清除Session中所有的对象 session.evict(user); // 清除Session中一个指定的对象
3)saveOrUpdate():把临时或游离状态转为持久化状态
在更新时,对象不存在就报错
本方法是根据id判断对象是什么状态的:如果id为原始值(对象的是null,
原始类型数字是0)就是临时状态,如果不是原始值就是游离状态。
User user = new User(); user.setId(3); // 自己生成一个游离状态对象 user.setName("newName"); session.saveOrUpdate(user);//持久化对象
4)delete():把持久化或游离转为删除状态
如果删除的对象不存在,就会抛异常
5)get():获取数据,是持久化状态
会生成:select ... where id=?
会马上执行sql语句
如果数据不存在,就返回null
6)load():获取数据,是持久化状态
load()后返回的是一个代理对象,要求类不能是final的,否则不能生成子
类代理,就不能使用懒加载功能了。
让懒加载失效的方式:
一、把实体写成final的;
二、在hbm.xml中写<class ... lazy="false">
不会马上执行sql语句,而是在第1次使用非id或class属性时执行sql。
如果数据不存在,就抛异常:ObjectNotFoundException
7)操作大量数据,要防止Session中对象过多而内存溢出
for (int i = 0; i < 30; i++) {User user = new User();user.setName("测试");session.save(user);if (i % 10 == 0) {session.flush(); // 先刷出session.clear(); // 再清空}} user = (User) session.get(User.class, 5); // 持久化 // 刷新Session缓存中对象的状态,即重新select一下 上session.refresh(user);
2 0
- Hibernate_6_session的管理
- 管理不可能管理的项目
- 企业信息管理的管理误区
- 我们的管理:项目管理
- 我们的管理:部门管理
- 我们的管理:战略管理
- 我们的管理:IT管理
- 数据库管理系统的管理
- 匪兵的管理童话:管理的目的
- 项目管理的两个方面:软环境管理,硬环境管理
- uC/OS 的任务管理,内存管理,时间管理
- 页式管理和段式管理、段页式管理的区别
- 管理的逻辑:管理=数学+哲学
- 项目管理与过程管理的区别
- 由内存管理想到的管理哲学
- 时间管理-项目管理的核心
- 用项目管理的方法管理考研
- 软件项目管理.软件管理的复兴
- Ten Useful Techniques in Go
- EBS DBA指南笔记(一)
- 用记事本写第一个Servlet程序
- 以存储过程实现比对不同表的金额,提升测试效率
- makefile
- Hibernate_6_session的管理
- 黑马程序员--C语言知识汇总
- C++常用的STL
- EBS DBA指南笔记(二)
- excel HYPERLINK 如何超链接到某个文字
- LeetCode 118 Pascal's Triangle
- [LCA模板]POJ1330 Nearest Common Ancestors
- Java线程池的调用
- EBS DBA指南笔记(三)