急!请教一个ssh整合后DAO里的方法报异常的问题?

mxx123 2009-10-12 08:06:49
package org.yidong.vo;

/**
* Mupdata entity.
*
* @author MyEclipse Persistence Tools
*/

public class Mupdata implements java.io.Serializable {

// Fields

private Integer mupid;
private Marker marker;
private String updata;

// Constructors

/** default constructor */
public Mupdata() {
}

/** full constructor */
public Mupdata(Marker marker, String updata) {
this.marker = marker;
this.updata = updata;
}

// Property accessors

public Integer getMupid() {
return this.mupid;
}

public void setMupid(Integer mupid) {
this.mupid = mupid;
}

public Marker getMarker() {
return this.marker;
}

public void setMarker(Marker marker) {
this.marker = marker;
}

public String getUpdata() {
return this.updata;
}

public void setUpdata(String updata) {
this.updata = updata;
}

}

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.yidong.vo.Mupdata" table="mupdata" schema="dbo" catalog="yidong">
<id name="mupid" type="java.lang.Integer">
<column name="mupid" />
<generator class="native" />
</id>
<many-to-one name="marker" class="org.yidong.vo.Marker" fetch="select">
<column name="m_id" />
</many-to-one>
<property name="updata" type="java.lang.String">
<column name="updata" length="100" />
</property>
</class>
</hibernate-mapping>

package org.yidong.dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.yidong.dao.MupdataDAO;
import org.yidong.vo.Mupdata;

public class MupdataDAOImpl extends HibernateDaoSupport implements MupdataDAO {

public void insert(Mupdata mupdata) throws Exception {
super.getSession().save(mupdata);
}

public List queryAll() throws Exception {
String hql = "FROM Mupdata";
List all = super.getSession().createQuery(hql).list();
System.out.println(all.size());
return all;
}

public void update(Mupdata mupdata) throws Exception {
// TODO Auto-generated method stub

}

public List queryById(int muid) throws Exception {
//Mupdata mupdata=null;
String hql = "FROM Mupdata AS mu WHERE mu.mupid=?";
Query q = super.getSession().createQuery(hql);
q.setInteger(0, muid);
List all = q.list();
/*if (all.size() > 0) {
mupdata = (Mupdata) all.get(0);
}*/
return all;
}

}

/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package org.yidong.struts.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.yidong.dao.MupdataDAO;


public class MuplistAction extends Action {
private MupdataDAO mupdatadao;
public MupdataDAO getMupdatadao() {
return mupdatadao;
}
public void setMupdatadao(MupdataDAO mupdatadao) {
this.mupdatadao = mupdatadao;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
List all=null;
try {
all=this.mupdatadao.queryAll();
//System.out.println(all.size());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//System.out.println(all.size());
request.setAttribute("allmu", all);
return mapping.findForward("mulist");
}
}

以上就是我的后台程序,可我运行到muplist.do的时候,就报空指针异常,
异常位置在dao的queryAll()的 方法里的List all = super.getSession().createQuery(hql).list();
和action里的all=this.mupdatadao.queryAll();
这两句上。希望高人能指点一下!
...全文
329 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
zl3450341 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 mxx123 的回复:]
暂时解决了,我把外键都去了就正常了。不过还是希望能在不去掉外键的基础上解决啊!
[/Quote]

。? 去掉外键就正常了?
imasmallbird 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 mxx123 的回复:]
暂时解决了,我把外键都去了就正常了。不过还是希望能在不去掉外键的基础上解决啊!
[/Quote]
有时间再研究一下~~
mxx123 2009-10-15
  • 打赏
  • 举报
回复
暂时解决了,我把外键都去了就正常了。不过还是希望能在不去掉外键的基础上解决啊!
zhuangwenxun 2009-10-14
  • 打赏
  • 举报
回复
代码太长了
imasmallbird 2009-10-14
  • 打赏
  • 举报
回复
知道的有三种情况解决这个问题:
1.是否是cglib-2.1.3.jar和cglib-nodep-2.1_3.jar相冲突,如果是只需要把cglib-2.1.3.jar包删除就没有问题了
2.将操作表中的属性lazy改成false
3.将cglib升级到2.2

主要试一下第一个方法,是不是这个原因~~,因为你的意思就是有的时候可以,有的时候不可以
如果是这个原因那么就是由于,加载数据时load和get的区别导致的。
可以看一下这个链接:
http://www.blogjava.net/vickzhu/archive/2008/10/22/235993.html
a81420754 2009-10-14
  • 打赏
  • 举报
回复
代码确实有点长,帮顶
bunrise 2009-10-14
  • 打赏
  • 举报
回复
fetch只对get/load有效,对query无效
你不加这个参数直接查询也能达到你的效果
imasmallbird 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 mxx123 的回复:]
引用 19 楼 imasmallbird 的回复:
知道的有三种情况解决这个问题:
1.是否是cglib-2.1.3.jar和cglib-nodep-2.1_3.jar相冲突,如果是只需要把cglib-2.1.3.jar包删除就没有问题了
2.将操作表中的属性lazy改成false
3.将cglib升级到2.2

主要试一下第一个方法,是不是这个原因~~,因为你的意思就是有的时候可以,有的时候不可以
如果是这个原因那么就是由于,加载数据时load和get的区别导致的。
可以看一下这个链接:
http://www.blogjava.net/vickzhu/archive/2008/10/22/235993.html

好像还是不行啊?另外,我换成MYSQL就一切正常了,用SQLserver就不行啊
[/Quote]
无能为力了,要是解决了,你把解决的方法帖上来~~
zl3450341 2009-10-14
  • 打赏
  • 举报
回复
.....代码实在是太长了

mxx123 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 imasmallbird 的回复:]
知道的有三种情况解决这个问题:
1.是否是cglib-2.1.3.jar和cglib-nodep-2.1_3.jar相冲突,如果是只需要把cglib-2.1.3.jar包删除就没有问题了
2.将操作表中的属性lazy改成false
3.将cglib升级到2.2

主要试一下第一个方法,是不是这个原因~~,因为你的意思就是有的时候可以,有的时候不可以
如果是这个原因那么就是由于,加载数据时load和get的区别导致的。
可以看一下这个链接:
http://www.blogjava.net/vickzhu/archive/2008/10/22/235993.html
[/Quote]
好像还是不行啊?另外,我换成MYSQL就一切正常了,用SQLserver就不行啊
Gaara_YJ 2009-10-13
  • 打赏
  • 举报
回复
楼上说的应该是这个问题:
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

应该改成:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>


这里的sessionFactory是继承HibernateDaoSupport父类的一个属性

都修改后用下面的这个得到Session 试一下
Session session = super.getHibernateTemplate().getSessionFactory()
.openSession();


bunrise 2009-10-13
  • 打赏
  • 举报
回复
你使用了HibernateDaoSupport 却注入
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
在HibernateTemplate中没有发现setHibernateTemplate(SessionFactory sessionFactory)
却只有一个构造函数hibernateTemplate(SessionFactory sessionFactory)这样不能注入吧
但spring为啥没包错,这个是一个疑惑
你既然是继承HibernateDaoSupport ,那应该将sessionFactory注入到HibernateDaoSupport 或者MupdataDAO,他通过creatHibernateTemplate创建HibernateTemplate,你可以使用getHibernateTemplate来调用HibernateTemplate的方法;

或者按照你的方式

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

既然你注入这个。那你的dao应该继承HibernateTemplate。

以上为我个人观点,不知道是否正确,望大家指正交流
他的代码我实在看不出问题,但既然错了,就应该有问题存在,大家都提到了是否注入进去
我也往这方面想了以下
mxx123 2009-10-13
  • 打赏
  • 举报
回复
以下就是报的异常:
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.yidong.dao.impl.MupdataDAOImpl.queryAll(MupdataDAOImpl.java:18)
at org.yidong.struts.action.MuplistAction.execute(MuplistAction.java:31)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:114)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:91)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)
at org.yidong.filter.EncodingFilter.doFilter(EncodingFilter.java:22)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:189)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:266)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:292)
at com.caucho.server.port.TcpConnection.handleRequests(TcpConnection.java:577)
at com.caucho.server.port.TcpConnection$AcceptTask.doAccept(TcpConnection.java:1211)
at com.caucho.server.port.TcpConnection$AcceptTask.run(TcpConnection.java:1152)
at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:759)
at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:681)
at java.lang.Thread.run(Thread.java:619)
主要在
at org.yidong.dao.impl.MupdataDAOImpl.queryAll(MupdataDAOImpl.java:18)
at org.yidong.struts.action.MuplistAction.execute(MuplistAction.java:31)
Gaara_YJ 2009-10-13
  • 打赏
  • 举报
回复
应该是Session session = super.getHibernateTemplate().getSessionFactory()
.openSession();

这样才对!!!
阿士匹灵 2009-10-13
  • 打赏
  • 举报
回复
学习
xiaozejun 2009-10-13
  • 打赏
  • 举报
回复
session没有获取到啊 那么就是sessionFactory注入有问题
你确保你每个dao类 就是继承HibernateDaoSupport的那个类
是否在配置文件中注入了sessionFactory
mxx123 2009-10-13
  • 打赏
  • 举报
回复
那为何有的就可以正常通过呢?我发现现在的问题是hbm配置文件里有fetch=“select”的vo查询方法,就报异常,而没有的这个fetch=“select”的就可以正常啊?这是为什么啊?要如何解决啊?
mxx123 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 woming66 的回复:]
public List queryAll() throws Exception {
        String hql = "FROM Mupdata";
     List all = super.getSession().createQuery(hql).list();        System.out.println(all.size());
        return all;
    }


大眼一看没什么毛病,如果出现空指针也是getSession().createQuery() 这个Dao注入sessionFactory了吗?
[/Quote]
注入了啊
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<!-- 表示允许自动提交 -->
<prop key="hibernate.connection.autocommit">true</prop>
<!-- 显示sql语句
<prop key="hibernate.show_sql">true</prop>
-->
</props>
</property>
<property name="mappingResources">
<list>
<value>org/yidong/vo/Business.hbm.xml</value>
<value>org/yidong/vo/Factory.hbm.xml</value>
<value>org/yidong/vo/Koi.hbm.xml</value>
<value>org/yidong/vo/Marker.hbm.xml</value>
<value>org/yidong/vo/MarkerKoi.hbm.xml</value>
<value>org/yidong/vo/MarkerBusiness.hbm.xml</value>
<value>org/yidong/vo/Users.hbm.xml</value>
<value>org/yidong/vo/Mupdata.hbm.xml</value>
<value>org/yidong/vo/Mqa.hbm.xml</value></list>
</property>
</bean>
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<bean id="mupdatadao" class="org.yidong.dao.MupdataDAO" abstract="true">
</bean>
<bean id="mupdatadaoimpl" class="org.yidong.dao.impl.MupdataDAOImpl"
parent="mupdatadao">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>
zml2009 2009-10-12
  • 打赏
  • 举报
回复
把错误信息发上来啊
woming66 2009-10-12
  • 打赏
  • 举报
回复
public List queryAll() throws Exception {
String hql = "FROM Mupdata";
List all = super.getSession().createQuery(hql).list(); System.out.println(all.size());
return all;
}


大眼一看没什么毛病,如果出现空指针也是getSession().createQuery() 这个Dao注入sessionFactory了吗?
加载更多回复(5)

67,513

社区成员

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

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