JPA的延时加载分成两种情况1.表间的延时加载,2.表中属性的延时加载,比如大型字段blob,需等到使用时在加载,效率才比较高
首先,1.表间的延时加载
JPA中数据获取(Fectching)有两种方式:Eager和Lazy。明白他们之间的差异和知道何时应用哪种方式对于有效率地进行数据库操作非常关键。
Lazy: 只有需要的时候才将相关联的实体取出
Eager: 一次将所有相关联的实体取出
使用的方法如下:
java 代码
@OneToMany(fetch=FetchType.EAGER)
-
publicCollection<Empolyee>getEmpolyees(){
-
returnempolyees;
-
}
关系类型后使用fetch元素。通常Eager是低效率的,因为他将整个关系映射图取出。例如我们有多个消费者,每个消费者有多个订单,每个订单有多个订货商品。如果我们对所有关系全部使用Eager方式,那么仅仅是查询一些消费者就可能产生巨大的对象图,包括了符合查询条件的消费者,以及每个消费者的所有订单,以及每个订单的所有订货商品。这会导致严重的负载问题。如果你在一个持久上下文中操作一些受管理的实体(Managed Entity),那么使用Lazy方式更加有效率。在大部分情况下,只有需要时,相关联实体才会被加载。
更加细粒度的数据获取控制可以通过使用Lazy方式和获取联合来(fetch joins)完成。如果查询没有显式指定fetch joins,则使用Lazy方式获取数据,如果查询指定了fetch joins,在joins中的实体将使用Eager方式获取数据。
2.表中属性的延时加载
@Lob
默认情况下,JPA 持续性提供程序假设所有持久数据均可以表示为典型的数据库数据类型。
结合使用 @Lob 批注与 @Basic 映射,以指定持久属性或字段应作为大型对象持久保存到数据库支持的大型对象类型。
Lob 可以是二进制类型或字符类型。持续性提供程序从持久字段或属性的类型推断出 Lob 类型。
对于基于字符串和字符的类型,默认值为 Clob。在所有其他情况下,默认值为 Blob。
还可以使用 @Column 属性 columnDefinition 进一步改进 Lob 类型。
此批注没有属性。有关更多详细信息,请参阅 API。
示例 1-46 显示了如何使用此批注指定持久字段 pic 应作为 Blob 进行持久保存。
示例 1-46 @Lob
@Entitypublic class Employee implements Serializable { ...
@Lob
@Basic(fetch=LAZY)
@Column(name="EMP_PIC", columnDefinition="BLOB NOT NULL")
protected byte[] pic; ...}
分享到:
相关推荐
JTechLog JPA 延迟加载 该程序是JTechLog( )博客上“JPA延迟加载”文章的示例程序。 提供了EclipseLink和Hibernate持久性提供程序的JPA延迟加载。 具有JPA持久层和Spring MVC Web层的双层应用程序。 可以用Maven...
11_JPA详解_JPA中的一对多延迟加载与关系维护.zip 11_JPA详解_JPA中的一对多延迟加载与关系维护.zip
11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护.rar
springMVC jpa整合实例,以及jpa延迟加载问题。
06_传智播客JPA详解_大数据字段映射与字段延迟加载
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第6讲 大数据字段映射与字段延迟加载.avi
JPA中双向一对多实体Bean的属性配置,包括延迟加载,级联删除等
NULL 博文链接:https://xuwoool.iteye.com/blog/1306207
该项目是解决JPA延迟加载N + 1问题的典型示例: 基于Spring Boot 1.5.6 密钥基于两个注释: @NamedEntityGraph:关于实体的注释; @EntityGraph:存储库上的注释 在启动应用程序之前: 请修改您自己的数据库配置...
延迟加载 延迟加载 FetchType EAGER 加入获取 上篮 使用SUM和AVG函数进行查询 数据访问对象(DAO)标准 @NamedQuery:使用预定义参数的静态JPQL查询 使用条件的动态查询 条件查询 CriteriaBuilder 执照 根据MIT许可...
延迟加载所有关系 Spring Boot 配置 spring-data-rest 与 ember-data 的集成 通过 JPA 映射的多态关系支持 CORS Ember 元数据 侧载记录 尖端 ##Feature 详细信息 ###Lazy 加载所有关系所有DS.belongsTo()和DS.has...
访问任何未明确预取的字段将导致 ORM 从数据库中延迟加载它。 为了防止这种延迟加载,必须预先指示 ORM 为每个查询获取哪些列。 Eager-fetch 配置可能会变得非常深(对于有很多连接的表)并且维护起来很麻烦,这...
②延迟加载、 性能优化 ③HQL 查询、 条件查询、 SQL 查询 ④二级缓存与查询缓存 3、 Struts ①MVC 模式与 Struts 体系 4、 mybatis 5、 MVC 框架 6、 各框架对比与项目优化 7、 JPA ①EJB 三、 Java web 开发核心...
13.1.6 通过拦截延迟加载 13.2 选择抓取策略 13.2.1 批量预抓取数据 13.2.2 通过子查询预抓取集合 13.2.3 通过联结即时抓取 13.2.4 给二级表优化抓取 13.2.5 优化指导方针 13.3 高速...
SPA-spring-modular-example ... 使用 requireJS 等脚本延迟加载页面资源(js/css) Spring注解/xml配置驱动DI 冲刺 JPA Spring 宁静的 Web 服务引导用户界面Servlet 2.5 + 网络片段Maven 构建冲刺安全...
如果使用延迟加载,在读“多端”列表时会出异常,立即加载在得到多端时,是一个空集合(集合元素为0)。 * “一端”配置 * @OneToMany(mappedBy="“多端”的属性") * public List<“多端”类> get“多端”列表(){...
静态系统 System quizowysłużącydo zbieraniapytańodużytkownikównapisany w Springboocie。 乌瓦吉(Elementy warte ... tabeleładowanez listy oraz zapomocą延迟加载 Prosty CSS对象界面 RESTwywywietla
当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的...
129.mybatis 是否支持延迟加载?延迟加载的原理是什么? 130.说一下 mybatis 的一级缓存和二级缓存? 131.mybatis 和 hibernate 的区别有哪些? 132.mybatis 有哪些执行器(Executor)? 133.mybatis 分页插件的实现...
6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...