【Hibernate】Re08 加载策略配置
一、关联查询的问题:
使用关联查询,例如简单的一对多关系查询,查出一个部门对象和对应的N个员工对象。
如果一般情况下,我们只是需要部门对象,并不关系关联的员工对象,那么Hibernate关联查询出来的员工对象就是多余的了
所以Hibernate提供了懒加载策略,懒加载策略又称为延迟加载策略,当对象被调用时才会触发加载的需要。
二、可设置延迟加载的三个级别位置:
1、类级别,在Class标签中设置,默认值为True,表示使用延迟加载,False不使用懒加载,立即加载
2、一对多关联使用Set标签,除了上述的True & False,还有一个Extra,表示增强延迟加载
3、多对一关联级别,值区分了两种,Proxy延迟加载,No-Proxy不代理延迟加载,False立即加载
三、Open Session In View模式
懒加载与Session的问题:
使用懒加载,首次查询完毕,如果没有调用关联对象,则不会触发Hibernate延迟加载,Session查询完毕,对象就会被释放
如果调用这个主关系对象去获取关联对象,Session又不存在了,Hibernate就会抛出延迟加载初始化异常
Hibernate社区的解决方案是提出了Open Session In View 模式:
——用户的每一次请求,始终保持一个Sesssion开启状态
配置OSV模式:
JavaEE规范支持
@WebFilter("/*")
public class OpenSessionInViewFilter implements Filter { @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
Transaction transaction = null;
try {
transaction = HibernateUtil.getCurrentSession().beginTransaction();
filterChain.doFilter(servletRequest, servletResponse);
transaction.commit();
} catch (Exception exception) {
exception.printStackTrace();
if (transaction != null) transaction.rollback();
}
}
}
当然,如果不是注解配置而是使用web.xml配置:
<filter>
<filter-name>OpenSessionInView</filter-name>
<filter-class>cn.zeal4j.filter.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- - -
【Hibernate】Re08 加载策略配置的更多相关文章
- java之hibernate之加载策略和抓取策略
1.加载策略:指hibernate查询数据时,采用什么样的方式将数据写入内存.Hibernate中提供了两种方式来加载数据:懒加载和即时加载. 2.懒加载又称延迟加载,指使用hiberante API ...
- Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)
假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...
- hibernate框架学习之数据抓取(加载)策略
Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...
- atitit.动态加载数据库配置in orm hibernate mybatis
atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象, ...
- Hibernate 加载策略得总结
Hibernate 加载策略得总结 加载策略(优化查询): 策略种类: 延迟加载: 等到使用的时候才会加载数据. 立即加载: 不管使用不使用,都会立刻将数据加载. 策略的应用: 类级别的加载策略. 关 ...
- hibernate框架学习第六天:QBC、分页查询、投影、数据加载策略、二级缓存
QBC查询 1.简单查询 Criteria c = s.createCriteria(TeacherModel.class); 2.获取查询结果 多条:list 单挑:uniqueResult 3.分 ...
- hibernate懒加载(转载)
http://blog.csdn.net/sanjy523892105/article/details/7071139 懒加载详解 懒加载为Hibernate中比较常用的特性之一,下面我们详细来了解下 ...
- web进修之—Hibernate 懒加载(6)
关于懒加载 在关系数据库设计的时候,我们很多时候把表之间的关系设置为强关联(使用外键进行约束),在Hibernate中利用对象的包含关系进行维护(HIbernate本身就是面向对象的数据库操作模式), ...
- Hibernate懒加载解析
Hibernate懒加载解析 在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来 ...
- Hibernate -- lazy加载
Hibernate -- lazy加载 hibernate类级别懒加载: lazy:true(默认) //类级别懒加载 //load方法 //class lazy属性 //默认值:true load获 ...
随机推荐
- MySQL入门到精通(十):SQL优化第一篇(2021最新发布)
SQL优化 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,创建表时N ...
- LeetCode 40. Combination Sum II 组合总和 II (C++/Java)
题目: Given a collection of candidate numbers (candidates) and a target number (target), find all uniq ...
- mysql 常用脚本语法
mysql 常用脚本语法 创建表: CREATE TABLE test_db1.test_table1 ( id INT auto_increment NOT NULL, my_name varcha ...
- LangChain让LLM带上记忆
最近两年,我们见识了"百模大战",领略到了大型语言模型(LLM)的风采,但它们也存在一个显著的缺陷:没有记忆. 在对话中,无法记住上下文的 LLM 常常会让用户感到困扰.本文探讨如 ...
- 在ftl模板中调整表格
- Prime Solutions
Prime Solutions 以下是一段中学时代的惨痛回忆-每当学到排列组合的单元时,最痛苦的不是分析题目,也不是带错公式或计算错误,而是所谓的「苦工题」,以下这题是个例子:给定正整数N与S,求出方 ...
- 测试网络的小工具WinMTR
ping网络的小工具 搜集了两个版本中文版和英文版 中文版---- WinMTR中文版.rarhttps://www.aliyundrive.com/s/bZqmokL5dTt提取码: k6v7 英文 ...
- C#如何创建一个可快速重复使用的项目模板
写在前面 其实很多公司或者资深的开发都有自己快速创建项目的脚手架的,有的是魔改代码生成器实现,有的直接基于T4,RazorEngine等模板引擎打造:但无论如何,其最终目的其实就是搭建一个自定义项目模 ...
- 12-CentOS7安装与管理数据库mariadb
关于Mariadb Mariadb和MySQL是同一个制作团队,命令几乎一样. 在centos中安装 yum -y install mariadb mariadb-server firewall-cm ...
- .NET使用CsvHelper快速读取和写入CSV文件
前言 在日常开发中使用CSV文件进行数据导入和导出.数据交换是非常常见的需求,今天我们来讲讲在.NET中如何使用CsvHelper这个开源库快速实现CSV文件读取和写入. CsvHelper类库介绍 ...