




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
failed to lazily initialize a collection of role: com.ccy.valueBean.Coustomer.accounts, no session or session was closed解决方案:1、设置lazy=false如果是用annotation,则配置如下OneToMany(targetEntity = CourseAuthorizationItem.class,cascade = CascadeType.PERSIST, CascadeType.MERGE,mappedBy = course,fetch=FetchType.EAGER)将fetch类型设置成直接获取2、就是使用filter,过滤所有的链接如果在使用filter的时候,要配置事务处理,否则会导致session处于只读状态而不能做修改、删除的动作hibernateFilterorg.springframework.orm.hibernate.support.OpenSessionInViewFilterhibernateFilter*.dofailed to lazily initialize a collection of role: XXXXXX, no session or session was closed例如:failed to lazily initialize a collection of role: com.gtc.wzgl.model.User.roles, no session or session was closed这个异常大致意思是说在多对一的时候(并且lazy=false),对象的实例失败,多数出现的情况有1、粗心造成实例对象类名写错之类的2、逻辑错误如之前就已经传递过来一个实体对象,然后调用实体对象的方法时牵涉到1对多的情况,但此时SESSION已经关闭,所以根本无法进行一对多的操作。3、设计到跨度的问题:这样打比方有多个实体对象,他们直接或则间接的有关联。比如有4个实体,分别是广告信息、广告、广告问答题、广告商:他们之间的关系为:广告商 1:n 广告广告 1:n 广告问答题广告商 1:n 广告商信息大家可以看到广告和广告商信息是没有直接关系的。但我要添加广告的时候我就必须将广告商的实体做为条件。那么这么一来广告商信息可能间接的就必须用上。下面看我的操作:ad(广告),subject(题目) Ad ad = new Ad(); ad.setAdProd(adform.getAdProd(); ad.setIndustry(industry); ad.setAdPicture(pagefile.getFileName(); ad.setAdFlack(adform.getAdFlack(); ad.setAdDv(dvfile.getFileName(); ad.setAdContent(adform.getAdContent(); ad.setGray(gray); ad.setAdDate(new Date(); ad.setOnlinetime(new Long(0); /以上为广告的基本信息填写,而重要的是看下面一句,在这里我的思路是subjectFormList是一个动态提交的表单,里面有若干个广告问答题。我将这些问答题变为一个Set,然后作为ad的一个属性。 Set subjectset=getSubjectSet(subjectFormList,ad); ad.setSubjects(subjectset);/然后提交,makePersistent是一个封装的方法,用途就是save()啦。addao是一个DAO,里面有ADUS。addao.makePersistent(ad);表面上看来很符合逻辑,只要我们在ad的映射里面加上对subject的级联更新就可以完成这项操作。但实际上会发生我们意想不到的问题,来让我们看一下getSubjectSet()的内容:public Set getSubjectSet(List subjectlist,Ad ad) Set set=new HashSet(0); Subject subject; for(Iterator it=subjectlist.iterator();it.hasNext();) subject=new Subject(); SubjectForm sf=it.next(); subject.setSuContent(sf.getSucontent(); subject.setSuOption(sf.getSuoption(); subject.setSuResult(Arrays.deepToString(sf.getSuresult(); subject.setSuType(String.valueOf(sf.getSutype(); subject.setAd(ad); set.add(subject); return set;我们在这个方法上设一个断点然后跟踪,之后你会发现断点在set.add(subject)只后就会出failed to lazily initialize a collection of role: XXXXXXXX no session or session was closed这个异常,并且这个异常还是出在了广告商的广告信息上 gray.messages。是不是很不可理解?这也是Hibernate的懒汉机制问题。没有任何一样技术是完美的。那我们该怎么处理这样的问题。有很 多人以为我们在广告商对广告商信息的隐射上加lazy=false这样在对gray操作会对messages进行关联,并查询时提出数据。但你会发现 改完之后会出现org.hibernate.LazyInitializationException: illegal access to loading collection这个异常。并切lazy=false是我们不推荐的一种方法。他会降低你的查询效率。对于这样的情况最好的解决办法就是不要偷懒,对一个实体进行操作的时候就该用那个实体的DAO,即应该有2句HQL。如下把getSubjectSet()改一改:public void getSubjectSet(List subjectlist,Ad ad) Set set=new HashSet(0); SubjectDAO subjectdao=DAOFactory.getDao(SubjectDAO.class); for(Iterator it=subjectlist.iterator();it.hasNext();) Subject subject=new Subject(); SubjectForm sf=it.next(); subject.setSuContent(sf.getSucontent(); subject.setSuOption(sf.getSuoption(); subject.setSuResult(Arrays.deepToString(sf.getSuresult(); subject.setSuType(String.valueOf(sf.getSutype(); subject.setAd(ad); subjectdao.makePersistent(subject); /set.add(subject); /遍历出所有subject一个个的往数据库里加。这样便不会出问题了。1、OpenSessionInView模式:以下有2种方法,第1种是结合SPRING,第2种是采用了拦截器Spring+Hibernate中, 集合映射如果使用lazy=true, 当PO传到View层时, 出现未初始化session已关闭的错误,只能在dao先初始化parent.getChilds().size();Spring提供Open Session In View来解决这个问题, 有两种方式1. Interceptor!- = OpenSession In View pattern =- .2. FilterhibernateFilterorg.springframework.orm.hibernate.support.OpenSessionInViewFilterhibernateFilter*.do第2种解决方法:Hibernate.initialize()强制加载关联对象今天又碰到错误failed to lazily initialize a collection of role: no session or session was closed试验了一下发现了几个解决方法:1、是把对应一对多的那两个列lazy=true改为lazyfalse即可2、对于查询中如果用的是xxx.load(class,id)则改为xxx,get(class,id)3在web.xml文件中加入 hibernateFilter org.springframework.orm.hibernate3.support.OpenSessionInViewFilter singleSession false !-这个- 一定要加不然很可能会报错:org.springframework.dao.InvalidDataAcc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年贵州云岩区第十六幼儿园教师招聘考试试题(含答案)
- 2025年大连市属国有企业招聘考试笔试试题(含答案)
- 2024年体育教师编制考试体育专业基础知识必考题库和答案
- 2025中药治疗执业药师继续教育试题及参考答案
- 2024新 公司法知识竞赛题库与答案
- 120急救考试题及答案
- 2024年公路养护工、检修工职责技能及理论知识考试题与答案
- 脑卒中吞咽障碍护理技能培训试题及答案
- 标准化沟通课件
- 化肥品牌知识培训课件
- 2024年黔西南州畅达交通建设运输有限责任公司招聘考试真题
- 2025年湖南电焊考试题库
- 2025年云南高考历史试卷解读及备考策略指导课件
- 沥青混凝土供货方案及保障措施
- 检验标准管理办法
- 2025年自考毛概考试试题及答案
- 2025-2026教科版科学三年级上册详细教学计划
- 2025即时零售行业规模消费场景及头部平台美团京东淘宝对比分析报告
- 安徽省安庆市2024-2025学年七年级下学期6月期末数学试卷(含详解)
- 2025至2030立体车库行业市场深度调研及发展趋势与发展趋势分析与未来投资战略咨询研究报告
- 医院智慧管理分级评估标准体系(试行)-全文及附表
评论
0/150
提交评论