`
andy_ghg
  • 浏览: 293410 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

Hibernate的抓取策略与Lazy笔记

阅读更多
遇到的需求:

在Spring启动时,需要加载resource下的roles(两者为多对多)。


遇到的问题:

由于需要在程序的其他地方做多对多的criteria分页查询,如果设置resource下的roles为fetch=FetchType.MEAGER 那么会出现N+1的问题。但如果设置fetch=FetchType.LAZY 那么会出现在Spring加载时出现Hibernate No Session Found异常(因为查询已经结束,Session被关闭)。

解决的方法:

利用FetchMode.JOIN单独写一个查询方法用于查询roles,代码如下:

	public Set<SYSRole> getRoles(String resid) {
		Criteria c = getSession().createCriteria(SYSResource.class);
		c.add(Restrictions.eq("id", resid));
		c.setFetchMode("roles", FetchMode.JOIN);
		SYSResource r = (SYSResource) c.uniqueResult();
		log.info(r.toString());
		return r.getRoles();
	}


注意事项:

需要注意查询的事务是propagation="REQUIRED"
分享到:
评论

相关推荐

    day36 06-Hibernate抓取策略:set集合上的抓取策略

    今天我们将深入探讨"day36 06-Hibernate抓取策略",特别是针对set集合的抓取策略。在阅读这篇博客文章(链接:https://364232252.iteye.com/blog/2368811)后,我们将了解到如何优化数据加载,以避免N+1查询问题,...

    hibernate抓取策略和懒加载案例

    在Java的持久化框架Hibernate中,数据访问优化是至关重要的,而抓取策略(Fetch Strategy)和懒加载(Lazy Loading)则是实现这一目标的关键技术。本文将深入探讨这两个概念,并通过具体的案例进行分析。 首先,让...

    day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    今天我们要讨论的是Hibernate框架中的一个关键概念——抓取策略,特别是针对"many-to-one"关系的抓取策略。这篇博客将深入剖析这个主题,帮助你更好地理解和应用Hibernate。 Hibernate是Java领域中最流行的对象关系...

    Hibernate延时加载与lazy机制.doc

    Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...

    HIBERNATE检索策略

    这是HIBERNATE默认的抓取策略,当一个实体被加载时,与之关联的实体或集合并不会立即加载,而是采用延迟加载(Lazy Loading)的方式。当第一次访问关联实体或集合时,HIBERNATE会额外发送一条SELECT语句来抓取数据,...

    hibernate 中的lazy属性祥解.txt

    在探讨Hibernate框架中的`lazy`属性时,我们深入解析了其功能、应用场景以及与之相关的潜在问题,尤其关注于如何有效利用此特性以优化数据库性能和应用响应速度。 ### Hibernate框架简介 Hibernate是一个开放源码...

    hibernate在集合上的lazy策略

    标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合类(如List、Set等)的懒加载。这篇文章可能详细解释了Hibernate在集合懒加载方面的实现方式以及其背后的原理。 懒加载的主要目的是...

    hibernate的lazy策略forClass

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的对象关系映射策略,用于提高应用程序的性能。懒加载的基本思想是延迟加载,即当真正需要数据时,才去数据库加载。在这个场景中,我们关注的是...

    gilead hibernate lazyload例子

    《Gilead与Hibernate懒加载在Flex中的应用实践》 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用程序的复杂性增加,数据量庞大的时候,如何有效地管理...

    Hibernate映射笔记

    ### Hibernate映射笔记详解 #### Hibernate映射文件与配置关系 Hibernate映射是ORM(对象关系映射)框架中的一项关键技术,它允许开发者在数据库表和Java对象之间建立映射关系,从而简化了数据访问层的开发工作。...

    SSH笔记-检索策略(lazy、fetch、batch-size)

    本笔记将聚焦于Hibernate中的类级别检索策略以及`lazy`、`fetch`和`batch-size`这三个属性的使用,帮助开发者更高效地管理数据库查询。 1. **懒加载(Lazy Loading)** `lazy`属性是Hibernate的懒加载机制,用于...

    Hibernate_容器映射技术笔记

    本篇笔记主要探讨了如何使用Hibernate进行容器映射,特别是针对集合类型的映射,如List、Set和Map。 首先,我们来看集合类型在Hibernate中的映射: 1. **单值Collection**: 这种情况通常指的是一个对象与多个其他...

    Hibernate入门(代码+笔记)

    这包括懒加载(Lazy Loading)策略,通过延迟加载提高性能;级联操作(Cascade)可以将父对象的操作同步到子对象;以及开放 session 在视图(Open Session In View,OSIV)模式,确保在Web请求生命周期内保持一个...

    当设置lazy=true时,怎样使用extjs和Hibernate

    标题"当设置lazy=true时,怎样使用ExtJS和Hibernate"所涉及的知识点主要集中在如何在ExtJS前端应用中与使用了懒加载特性的Hibernate后端进行交互。以下是对这个主题的详细解释: 1. **Hibernate懒加载**: - 懒...

    Hibernate入门(上)笔记.pdf.zip

    Hibernate的配置文件(hibernate.cfg.xml)包含了数据库连接信息、方言(Dialect)、缓存策略等设置。此外,还需要为每个实体类创建对应的.hbm.xml映射文件,或者使用注解方式直接在实体类上定义映射。 四、Session...

    hibernate达内五天复习笔记.pdf

    《Hibernate达内五天复习笔记》是一份详细记录了Hibernate框架学习的资料,旨在帮助读者深入理解并掌握Hibernate这一强大的Java持久化框架。以下是笔记中的主要知识点: 1. **ORM原理**: - **对象持久化**:将...

    hibernate个人学习笔记完整版

    在实践中,你还需要理解如何将Hibernate与其他框架(如Spring)集成,以构建更复杂的应用系统。 总的来说,【hibernate个人学习笔记完整版】是全面学习Hibernate的理想资源,无论你是初学者还是有经验的开发者,都...

    Hibernate lazy延迟加载

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会立即加载其关联的对象或集合,而是在真正需要...

    J2EE应用下基于AOP的抓取策略实现

    ### J2EE应用下基于AOP的抓取策略实现 #### 概述 在J2EE应用程序中,尤其是在使用对象关系映射(Object/Relational Mapping, O/R Mapping)工具时,开发人员经常面临如何高效地从数据库获取数据的问题。默认情况下...

Global site tag (gtag.js) - Google Analytics