hibernate+spring 出错!.过路人帮忙看哈.

Bob_ouyang 2008-01-25 03:26:38
我用纯hibernate的时候可以写 session.createQuery(hql);
但是我用spring+hibernate的时候就不能getHibernateTemplate().find(hql);

就包下面的错误.

严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
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:862)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
at org.hibernate.type.EntityType.resolve(EntityType.java:303)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:849)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:840)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:836)
at com.wangyuit.webshop.dao.impl.VCDDaoImpl.findMyVcd(VCDDaoImpl.java:42)
at com.wangyuit.webshop.struts.action.VcdManageAction.show_me_shop(VcdManageAction.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
...全文
208 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuexl 2008-05-25
  • 打赏
  • 举报
回复
我用的是hibernate 3.1 spring 1.2 struts 1.2 也出现这个问题。郁闷啊。
degdfu 2008-05-18
  • 打赏
  • 举报
回复
你用的是不是Myeclipse 6.0+eclipse3.3 啊!你用5.0+3.2试一下
Bob_ouyang 2008-01-26
  • 打赏
  • 举报
回复
哦.
是的
hibernate 3.1. spring 2.0 struts1.3

但是我的 getHibernateTemplate().load(); 也怎么不行呢?

那也是 lazy=true.
我是显示的写成lazy=false

westsum 2008-01-26
  • 打赏
  • 举报
回复
Hibernate你应该用的是3.1吧,在关系映射文件中,请关闭延迟加载. 将lazy=true的值改成false.3.1默认是开启的
guoqiangone 2008-01-25
  • 打赏
  • 举报
回复
你这是空指针异常,对象未实例化,
Bob_ouyang 2008-01-25
  • 打赏
  • 举报
回复
还有 我用 getHibernateTemplate().load(); 不管是数据库里面有没有值都报错......

find()也是的.不管有没有数据他们2个都报错/
Bob_ouyang 2008-01-25
  • 打赏
  • 举报
回复
List list=this.getHibernateTemplate().find("from VCD v where v.vcdAdmin.username=?",username);

同样我也把这条hql语句放到纯hibernate里面运行,但是可以而且还有数据.
我真是郁闷.............
yztommyhc 2008-01-25
  • 打赏
  • 举报
回复
第一: 你说的没错,但是和 '辉辉' 说的不是同一个问题. 他说的是不同的返回值的问题, 如果没有符合条件的记录 ,
get()返回null ,不报错 , 而load()是会报错的. 而你说的只是 load()的实现机制.
第二: getHibernateTemplate()是在 hibernate 基础上的. 你能把你的查询代码贴出来看看么?
Bob_ouyang 2008-01-25
  • 打赏
  • 举报
回复
不对啊
第一:我看好多文档都是说 load() 先到缓存里面找如果没找到就到数据库里面找.
第二:find() 也好像是 createQuery();给变过来的. 那为什么我用纯hibernate可以行但是用spring+hibennate就不行呢?

能帮我解释吗?
我是小辉辉 2008-01-25
  • 打赏
  • 举报
回复
get方法与load方法的区别在于此,如果没有查到相应记录,load方法会抛异常,而get返回的是null,至于find应该是和load一样的,在hibernate中,load方法是与缓存有很大关系的,而get方法则不是.比如我们在关闭session后再去取实体类的信息,如果是采用的get方法取的数据那么是可以读到的,load就读不到了,因为session以关闭了.
Bob_ouyang 2008-01-25
  • 打赏
  • 举报
回复
砸就没人呢?
Bob_ouyang 2008-01-25
  • 打赏
  • 举报
回复
说明点.我用getHibernateTemplate().get( );啊别的都可以.
但是就是用 getHibernateTemplate().load() 和getHibernateTemplate().find();不行,
你们说说这是什么情况啊?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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