`
lpacec
  • 浏览: 172179 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

lazy是不是设置为true的问题

阅读更多

News是一,News_Pic是多, 

sql = "from News as news";

在hibernate中,默认lazy=false,这样,在列表显示时,查询News时,对应的News_Pic的查询也会产生,

如果此时设置为lazy=true,即可解决此问题,

但是如果为ture,对显示News的具体信息(包括对应的News_Pic)时就会报错

failed to lazily initialize a collection of role:

no session or session was closed at

所以最终的解决办法是,lazy=false,无非是多显示几条sql

 

或者可以查询部分字段(需要的,不带pic的)

sql = "select news.id,news.title from News as news";

但在页面上就必须这样显示了<ww:property value="top[0]"></ww:property>

xml 代码
  1. <ww:property value="top[0]"/>   

 投影查询

不过这样以后,维护相对来说麻烦些,如果不是报表。最好不要这样做

  另一种解决办法,就是使用OpenSessionInView.修改web.xml即可,加入以下代码即可

xml 代码
  1. <filter>    
  2. <filter-name>OpenSessionInViewFilterfilter-name>    
  3. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilterfilter-class>    
  4. <init-param>    
  5. <param-name>singleSessionparam-name>    
  6. <param-value>trueparam-value>    
  7. init-param>    
  8. filter>    
  9. <filter-mapping>    
  10. <filter-name>OpenSessionInViewFilterfilter-name>    
  11. <url-pattern>*.actionurl-pattern>    
  12. filter-mapping>  

 但是这样虽然解决了查询问题,但是在update,delete等操作上就又报错:

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

网上又说
尽管Open Session In View看起来还不错,其实副作用不少。看回上面OpenSessionInViewFilter的doFilterInternal方法代码,这个方法实际上是被父类的doFilter调用的,因此,我们可以大约了解的OpenSessionInViewFilter调用流程: request(请求)->open session并开始transaction->controller->View(Jsp)->结束transaction并close session.

     一切看起来很正确,尤其是在本地开发测试的时候没出现问题,但试想下如果流程中的某一步被阻塞的话,那在这期间connection就一直被占用而不释放。最有可能被阻塞的就是在写Jsp这步,一方面可能是页面内容大,response.write的时间长,另一方面可能是网速慢,服务器与用户间传输时间久。当大量这样的情况出现时,就有连接池连接不足,造成页面假死现象。

Open Session In View是个双刃剑,放在公网上内容多流量大的网站请慎用。

分享到:
评论

相关推荐

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

    当`@ManyToOne`, `@OneToOne`, `@OneToMany`, 或 `@ManyToMany`注解中的`fetch`属性设置为`LAZY`时,关联的实体将不会在主实体加载时立即加载,而是在第一次访问这些关联属性时才加载。 - 这种策略避免了在不需要...

    spring中lazy=“true”的正常读取关联表(用opensessioninview)

    总结来说,`lazy="true"` 是一种有效的性能优化策略,但需要注意其与Web环境的兼容性问题,这时OSIV模式可以提供解决方案。然而,OSIV也存在潜在的问题,因此在实际应用中需要权衡利弊,合理设计数据模型和事务管理...

    jQuery_lazyload

    - `skip_invisible`:是否跳过不可见元素,如果为`true`,则只有可见元素会被加载。 5. **应用场景**: - 图片画廊:在用户滚动时逐个加载图片,避免一次性加载大量图片导致页面卡顿。 - 长文章或博客:文章中的...

    hibernate 中的lazy属性祥解.txt

    在`Person.hbm.xml`配置文件中,我们可以看到`address`属性被设置为`lazy="true"`,表示在加载Person实体时,其关联的Address集合不会立即加载。 ```xml name="address" table="address" lazy="true" cascade=...

    gilead hibernate lazyload例子

    &lt;set name="addresses" inverse="true" lazy="true"&gt; ``` 这样,当查询`User`对象时,`Address`集合不会立即加载,只有在调用该集合时才会发起数据库请求。 接下来,在Flex客户端,我们需要使用Gilead的...

    hibernate在集合上的lazy策略

    当我们声明一个集合为懒加载时,Hibernate会在映射文件(如.hbm.xml或使用注解)中配置`lazy="true"`。这样,Hibernate不会在初始化实体时加载整个集合,而是生成一个代理对象来代替真实的集合。当尝试访问这个代理...

    fancybox与lazyload的兼容问题解决(fancybox放大图片显示错误)

    ### fancybox与lazyload的兼容问题解决 #### 一、问题背景 在现代网页开发中,为了提升用户体验和页面加载速度,通常会采用lazyload(懒加载)技术来延迟加载非可视区域的内容,如图片、视频等。而fancybox则是一...

    jquery.lazyload 实现图片延迟加载

    - `skip_invisible`:是否忽略隐藏的图片,如果设置为 `true`,则只有显示的图片会被加载。 ### 六、实际应用中的注意事项 1. **占位符**:确保占位符图片尺寸与实际图片一致,以避免页面布局在图片加载过程中的...

    Hibernate延时加载与lazy机制.doc

    当我们将一个类或集合的`lazy`属性设置为`true`时,Hibernate会在需要时才去加载关联的对象,而不是在加载主对象时一并加载。这样可以避免不必要的数据库查询,提高性能。 **3. 错误和注意事项** 延迟加载可能导致...

    jquery.lazyload

    - `event`:默认使用`scroll`事件检测是否需要加载,也可以设置为`resize`、`click`等其他事件。 - `effect`:定义加载效果,如`fadeIn`、`none`(直接显示)等。 - `skip_invisible`:默认为`true`,跳过不可见的...

    浅谈spring中的default-lazy-init参数和lazy-init

    如果将default-lazy-init参数设置为true,那么所有Bean将不会在Spring容器启动时实例化,而是在第一次被访问时实例化。这可以大大减少项目启动时间。 在applicationContext.xml文件中,可以通过以下方式设置default...

    懒加载jquery.lazyload.js

    4. `skip_invisible`:是否跳过不可见元素,默认为`true`,设置为`false`时,即使元素不可见也会加载。 5. `attr`:图片真实地址的属性名,默认为`data-src`,可以改为`data-original`等。 **四、高级用法** 1. **...

    LazyLoad.zip

    - **Fragment的替换与添加**:如果多个Fragment共用同一个数据源,需要考虑数据的一致性问题,确保正确的时间点更新所有相关的Fragment。 综上所述,实现Fragment的懒加载涉及对生命周期的理解、适当的加载时机选择...

    Hiberbate 3延迟加载(Lazy)介绍

    在Hibernbate配置文件(如`hibernate.cfg.xml`或`.hbm.xml`)中,可以通过设置`lazy="true"`来启用延迟加载。例如: ```xml &lt;class name="com.neusoft.entity.Usertable" lazy="true"&gt; ``` 对于集合属性,同样可以...

    Spring IOC Bean标签属性介绍(教学视频+源代码)

    1.4 当 Scope="singleton" 且 lazy-init="true" 时 1.5 当scope="prototype"时 1.6 当scope="prototype" 且 lazy-init="true" 时 1.7 小结 1.8 depends-on 1.8.0 实体类JavaBean 1.8.0.1 Student类 1.8.1 配置文件都...

    前端开源库-jquery-lazyload

    - `skip_invisible`:是否跳过不可见元素,默认为`true`。 **4. 深入理解** - **性能优化**:jQuery LazyLoad 使用` IntersectionObserver API` 来检测元素是否进入视口,这是一种现代浏览器的高效方法,相比传统...

    JQueryLazyLoad 图片懒加载实例

    - `skip_invisible`:设置是否跳过不可见的元素,默认为`true`,即只有可见元素才会被处理。 ### 5. 实例应用 在实际项目中,我们可以根据具体需求调整配置,例如: ```javascript $(function() { $(".lazy")....

    hexo-lazyload-image:用于Hexo的lazyload图像插件

    不必担心lazyload SEO问题,因为Google已经支持它。 我们只是。安装$ npm install hexo-lazyload-image --save用法首先从您的hexo项目的_config.yml添加配置。 lazyload : enable : true onlypost : false # ...

    Spring注解之@Lazy注解使用解析

    @Lazy注解的使用可以分为两种情况:lazy=false和lazy=true。lazy=false代表不延时加载,查询出对象A的时候,会把B对象也查询出来放到A对象的引用中,A对象中的B对象是有值的。lazy=true代表延时加载,查询A对象时,...

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

    默认情况下,如果实体的关联属性标记为`lazy="true"`,那么这个关联对象不会在主对象加载时一同加载,而是在需要时通过单独的数据库查询获取。这种策略可以避免不必要的数据加载,提高程序性能,但也可能导致“懒...

Global site tag (gtag.js) - Google Analytics