`
manjingtou
  • 浏览: 121099 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate lazy

 
阅读更多

今天项目组有要使用的hibernate lazy的,我一直对这种lazy的方式是不赞成使用的,所以我的项目组内是明确不能使lazy,包括true和false当然hibernate 默认的模式是true ,但是在程序中我们是可以控制,当然如果不做配置话,也无法在前端使用,其实在项目中,用到lazy的时候并不是特别多(个人观点),大部分的数据都是明确的要在后台查询出来的。用lazy也并不复杂,在web.xml中配置

	<filter>
		<filter-name>hibernateFilter</filter-name>
		<filter-class>
			org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
		</filter-class>
		<init-param>
			<param-name>singleSession</param-name>
			<param-value>false</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>hibernateFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>

 

就可以使用延迟加载了,spring通过filter的方式对绑定hibernate session 到request的线程中。

that binds a Hibernate Session to the thread for the entire processing of the request

 

刚开始我是把上面这段配置随便放到web.xml中,一致不成功总报session 关闭,不起作用,最后查了一下,我把这个filter放到了struts的filter之上,就可以了。

 

 

说明FlushMode有五种属性

1 NEVEL  

已经废弃了,被MANUAL取代了


2 MANUAL

spring3.x中的opensessioninviewfilter已经将默认的FlushMode设置为MANUAL了;
如果FlushMode是MANUAL或NEVEL,在操作过程中hibernate会将事务设置为readonly,所以在
增加、删除或修改操作过程中会出现如下错误
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read
-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition;
解决办法网上有很多;
1 配置事务,spring会读取事务中的各种配置来覆盖hibernate的session中的FlushMode;
2 先编程式修改FlushMode,比如session.setFlushMode(FlushMode.AUTO); 这样hibernate就会自动去除readonly限制;
3 直接修改opensessioninviewfilter过滤器的配置,配置过滤器的时候配置
<filter>
      
<filter-name>openSession</filter-name>
      
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
      
<init-param>
          
<param-name>flushMode</param-name>
          
<param-value>AUTO</param-value>
      
</init-param>
  
</filter>

3 AUTO

设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库

4 COMMIT

提交事务或者session.flush()时,刷新数据库;查询不刷新


5 ALWAYS

每次进行查询、提交事务、session.flush()的时候都会刷数据库
这里需要说一下和AUTO的区别,当hibernate缓存中的对象被改动之后,会被标记为脏数据(即与数据库不同步了)。当session设置为FlushMode.AUTO时,hibernate在进行查询的时候会判断缓存中的数据是否为脏数据,是则刷数据库,不是则不刷,而always是直接刷新,不进行任何判断。很显然auto比always要高效得多。

 

 

分享到:
评论

相关推荐

    gilead hibernate lazyload例子

    这就是Hibernate懒加载(Lazy Load)机制的作用所在。懒加载是一种延迟加载策略,只在真正需要时才加载关联的数据,以减少内存消耗和提高响应速度。 Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间...

    Hibernate lazy加载FOR Connection

    标题中的“Hibernate lazy加载FOR Connection”指的是Hibernate框架中的一种特性,即懒加载(Lazy Loading)。在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载...

    Hibernate lazy延迟加载

    **标题**: Hibernate懒加载(Lazy Loading) 在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会...

    hibernate 中的lazy属性祥解.txt

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

    Dwr+Hibernate的Lazy问题

    标题中的"Dwr+Hibernate的Lazy问题"涉及到两个主要技术:Direct Web Remoting (DWR) 和 Hibernate。DWR 是一种让 JavaScript 在浏览器中直接调用服务器端 Java 方法的技术,而 Hibernate 是一个流行的Java持久化框架...

    hibernate一键休眠,SDK程式源码

    Hibernate的一键休眠通常指的是“延迟加载”(Lazy Loading)机制,这是一种在需要时才加载关联数据的技术,可以显著减少初始化时的内存占用和数据库交互次数,从而提高程序性能。 三、延迟加载(Hibernate Lazy ...

    hibernate的lazy策略forClass

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

    hibernate在集合上的lazy策略

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,它允许我们推迟对关联对象的加载,直到真正需要它们的时候。标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合...

    Hibernate延时加载与lazy机制.doc

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

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

    当我们设置Hibernate中的实体属性`lazy=true`时,这是懒加载(Lazy Loading)机制的体现。懒加载是一种优化策略,它允许我们在需要时才加载关联的对象,而不是在初始加载实体时就加载所有关联数据,从而提高性能。 ...

    ibatis2012中文 学习书籍

    - **3.2.2 Hibernate lazy load限制**: 在需要完整对象的场景下,无法仅加载部分字段。 - **3.2.3 Hibernate的其他解决方案**: 使用JavaBean/Map/Object数组,但可能导致大量冗余类。 - **3.3 单次更新操作**: ...

    Flex+Gilead+BlazeDS+Spring+Hibernate Demo

    Flex+Gilead+BlazeDS+Spring+Hibernate示例Demo,使用1:n和m:n两个双向关系,很好的演示了Gilead的Hibernate Lazy Killer特性,借助Gilead可以有效规避DTO模式的大量繁琐代码。效果图展示地址:...

    hibernate在单端关联上的lazy策略

    标题中的“hibernate在单端关联上的lazy策略”指的是Hibernate框架中的一种对象关系映射(ORM)技术,用于优化数据加载效率。在Hibernate中,懒加载(Lazy Loading)是一种延迟加载策略,它允许我们在需要时才加载...

    hibernate

    根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...

    hibernate学习资料大全

    延迟加载(Lazy Loading)是Hibernate的一项重要特性,允许我们在真正需要时才加载关联对象,从而避免了“大数据量”的一次性加载。理解并合理运用懒加载,可以避免内存溢出。 10. **性能优化**: Hibernate 提供...

    hibernate aip hibernate aip

    7. **性能优化**:包括延迟加载(Lazy Loading)、批处理(Batch Processing)、缓存策略调整等,这些都可以提升Hibernate应用的性能。 8. **查询优化**:避免N+1查询问题,使用JOIN fetch提前加载关联数据,使用...

    hibernate 3.6 中文 chm

    12. **延迟加载(Lazy Loading)**:为了提高性能,Hibernate支持属性和关联的延迟加载,即只有在真正需要时才加载数据。 13. **事件监听器**:Hibernate允许定义事件监听器来处理特定的数据库操作,如对象的保存、...

    hibernate的jar包

    8. **延迟加载(Lazy Loading)**:Hibernate支持懒加载机制,只有当真正需要访问关联对象时,才会发起数据库查询。 9. **集合映射**:Hibernate支持多种集合类型的映射,如List、Set、Map等,以及一对一、一对多、多...

    Hibernate框架jia包

    -延迟加载(Lazy Loading):只在需要时加载关联对象,避免数据冗余。 8. **HQL和Criteria API**: HQL是面向对象的查询语言,类似于SQL但更接近Java。Criteria API则提供了一个程序化的查询方式,可以在运行时...

Global site tag (gtag.js) - Google Analytics