关于SSH整合的问题

sessionFactory异常的问题
谈这个问题前,我先介绍下hibernate查询

  1. hibernate查询分为两种:get()和load()
    首先介绍get()和load()方法的区别:
    get()方法和load()方法的区别主要在于对二级缓存的使用上。
    load()方法会使用二级缓存,而get()方法在一级缓存没有找到会直接查询数据库,不会去二级缓存中查找。
    get():如果在数据库中没有记录会返回空,get()无论如何都会返回数据.

注意:load():如果数据库中没有记录会抛出异常,如果有数据返回的是一个代理对象。

get()方法默认不支持lazy(延迟加载)功能,而load支持延迟加载
get()方法在查询不到数据时,返回null,而load因为支持延迟加载,只有在使用对象时才加载,所以如果数据库中不在数据load会抛出异常(org.hibernate.ObjectNotFoundException)。
get()和load()只根据主键查询,不能根据其它字段查询,如果想根据非主键查询,可以使用HQL


当我们配置Spring事务时,一般都配置在service层,这就产生了一个问题:我们使用hibernate的load()返回时一个代理对象,当我们在jsp页面开始查询时,就开始真正的发出sql语句进行查询,结果就发现session对象已经关闭了,所以就产生了上述图片的异常


  1. 解决方案一:使用get()方法。
    ———-但是会产生一个问题:如果这个对象关联了许多的对象(如老师关联了所教课程、所教班级)
    如果你讲fatchType设置为eager不会产生问题,能将所有信息查出
    但是如果你设置的为lazy,当你是jsp页面使用的还是代理对象,还要发出SQL语句
    2.解决方案二:配置session的范围
    ———-在web.xml配置如下
    sessionFactory的配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值