session.load抛出空指针?把load改为get就OK,

ohgold 2007-02-01 04:53:06
Session session=HibernateTool.getSession();
session.load(Man.class,"oo");
session.close();

这么简单的代码,抛出如下异常:
Exception in thread "main" java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3120)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:781)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:703)
at org.hibernate.impl.SessionImpl.load(SessionImpl.java:696)
at test.hibernate.testloadget.Test2.main(Test2.java:25)



可是将load改为get就没事了,不明白,这是为什么呢?

本人的lib只有hibernate3.jar,是不是少了什么文件?

请各位大人帮忙!!多谢啦!!
...全文
956 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqingshi163com 2012-08-29
  • 打赏
  • 举报
回复
同样的情况我也遇到了 但到现在也没能解决聊
fengandxue 2009-02-19
  • 打赏
  • 举报
回复
你在javabean里少了一个空参的构造器。
stillwather 2008-03-02
  • 打赏
  • 举报
回复
我也遇到这种情况,应该是cglib.jar包的问题,我用的是hibernate3.1,以前用3.0没有什么异常的,不知道是不是版本问题
ansili521 2007-08-28
  • 打赏
  • 举报
回复
load 跟 get 的不同
load 得到了..还可以update
而get 就不可以了.
zzxhunter 2007-08-28
  • 打赏
  • 举报
回复
你调用的参数不对吧,load方法有2种,一种传入Class,一种是Object

应该如下:
Session session=HibernateTool.getSession();
Man man = (Man)session.load(Man.class,"oo");
session.close();
或者:
Man man=new Man();
Session session=HibernateTool.getSession();
session.load(man,"oo");
session.close();
ohgold 2007-02-02
  • 打赏
  • 举报
回复
或者来群里讨论一下:28010790,JAVA全国讨论区
ohgold 2007-02-02
  • 打赏
  • 举报
回复
请问楼上贤兄,你们的session.load()能用是么?你们用的hibernate是什么版本,能否给兄弟一份,兄弟试试?最好是连测试代码打包哦,嘻嘻,兄弟接到了请你们米西哦!!!


多谢啦!!

兄弟的邮箱是ohgold2000@yahoo.com.cn

ohgold 2007-02-02
  • 打赏
  • 举报
回复
这个字符串主键只是测试啦,其实hibernate是主张32位字符串主键的,但是从安全角度出发,我还是喜欢数字主键的,就是因为数字主键不行,才做了这个例子测试,结果还是不行,

我下载了最新的hibernate3.jar,结果连get都抛异常了:(
liusoft 2007-02-02
  • 打赏
  • 举报
回复
如果load不到数据也不是空指针异常啊

http://www.javayou.com
ohgold 2007-02-02
  • 打赏
  • 举报
回复
lujh99(闲云) ,问题解决,请问如何给你分数?
傻根她弟 2007-02-02
  • 打赏
  • 举报
回复
v38(国产磁悬浮拖拉机:不上CSDN有多年) ( ) 信誉:100 Blog 2007-2-1 17:17:21 得分: 0



呵呵,
是load(),和get()的机制不同,有空看看hibernate的文档,里面说的很清楚
执行load()时,先从Session查找当前的对象是否存在,如果不存在,则从数据库中去查询,如果不存在这条记录,则扔异常

执行get()的时候,不论Session中是否存在当前对象,直接从数据库中去查询,如果不存在,则返回null

-------------------
load 跟 get 的不同
hackangcn 2007-02-02
  • 打赏
  • 举报
回复
你load的时候先从缓存去获取,而get是直接读数据库,报错是因为缓存和数据库没有同步,就是数据不一致
lujh99 2007-02-02
  • 打赏
  • 举报
回复
就是它的lib目录,你要省事的话就把lib下的文件全部拷到自己项目的lib下
ohgold 2007-02-02
  • 打赏
  • 举报
回复
请问楼上,这些包在什么地方呢,不在hibernate3下载下来后,除了hibernate3.jar,就是lib下面的包了,我去哪里找这些需要的包呢,
lujh99 2007-02-02
  • 打赏
  • 举报
回复
使用hibernate,cglib包是必须要的,否则无法创建代理,上面的异常也是在at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)时抛出的。其他包在你使用使用相应的功能时也会需要。
ohgold 2007-02-02
  • 打赏
  • 举报
回复
记录肯定是有的,get是能取出的,只是把get换成load就抛空指针了
suncheng_hong 2007-02-02
  • 打赏
  • 举报
回复
确保有记录才可以load.
v38 2007-02-01
  • 打赏
  • 举报
回复
为什么要用字符串做主键呢?
ohgold 2007-02-01
  • 打赏
  • 举报
回复
当然是啊,请注意:

【把load改成get,其它不动】,是正确执行的。
v38 2007-02-01
  • 打赏
  • 举报
回复
我开始说的不对:(
执行load()时,如果找不到记录,异常应为ObjectNotFoundException
这句:
//session.load(Man.class,"oo");
“oo”是你表的主键吗?
加载更多回复(2)

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧