博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate的get、load的方法的区别,IllegalArgument异常
阅读量:4704 次
发布时间:2019-06-09

本文共 1357 字,大约阅读时间需要 4 分钟。

关于hibernate中的load,get,以及延迟加载问题 今天在使用hibernate时,发现一异常: could not initialize proxy - no Session 查询资料之后发现,这是一个lazy使用后的Exception,使用迟时加载,在session关闭后使用该对象的未加载变量,也就是说session已经关闭,对象或其属性没有保存到内存中,然后你使用了,导致该异常。 检查代码之后,发现此异常是由于Dao中获取评论使用load方法根据id加载对象导致的: public Article get(Integer id) { return getHibernateTemplate().load(Article.class, id); } 将其改为get方法之后,程序正常运行: public Article get(Integer id) { return getHibernateTemplate().get(Article.class, id); } 原因是由于在Dao中并没有真正加载Article实例,而是返回代理对象,在使用时才真正加载对象。而在使用的时候是在就jsp页面的el表达式中,此时Hibernate Session已经断开,无法再获取到相应的数据。从而提示“无法初始化代理,session已经断开”。 那么get和load有哪些区别呢? 1. 对于Hibernate get方法,Hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。这个相对比较简单,也没有太大的争议。主要要说明的一点就是在这个版本中get方法也会查找二级缓存! 2. Hibernate load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true),分情况讨论: (1)若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB动态生成)。等到具体使用该对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException。 (2)若为false,就跟Hibernate get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException。 此外,在今天学习中还遇到了另一个异常: java.lang.IllegalArgumentException: id to load is required for loading 经过查找,此异常基本是由于某个字段为null导致的,解决方法:   1.检查主键生成策略是否配置正常?   2.Action是否都对字段配置了getter和setter方法? 原文地址:http://www.cnblogs.com/coolhwm/archive/2011/11/25/2263957.html

转载于:https://www.cnblogs.com/smallrock/p/3611655.html

你可能感兴趣的文章
找工作的一些感悟——前端小菜的成长
查看>>
C#委托和事件的应用Observer模式实例
查看>>
codevs1018 单词接龙(DFS)
查看>>
内容分发系统MediaEW:助新闻媒体转投HTML5
查看>>
HTML5 Canvas ( 径向渐变, 升级版的星空 ) fillStyle, createRadialGradient
查看>>
Stanford Local Programming Contest 2011
查看>>
多线程中,NSOperationQueue和GCD的区别
查看>>
python生成.exe文件
查看>>
PHP面向对象(OOP)----分页类
查看>>
监听SD卡状态
查看>>
vs2017 EFCore 迁移数据库命令
查看>>
serialVersionUID的作用
查看>>
liunx trac 插件使用之GanttCalendarPlugin
查看>>
(14)嵌入式软件开发工程师技能要求总结
查看>>
[hackerrank]Closest Number
查看>>
volatile关键字
查看>>
[Android] TabLayout设置下划线(Indicator)宽度
查看>>
<潭州教育>-Python学习笔记@条件与循环
查看>>
web自动化之验证码识别解决方案
查看>>
netty接收大文件的方法
查看>>