首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

项目中碰到hibernate报错,求帮助

2014-01-01 
项目中遇到hibernate报错,求帮助!这是我的POJO类部分代码:(当然后面是加了set和get方法的)private String

项目中遇到hibernate报错,求帮助!
这是我的POJO类部分代码:(当然后面是加了set和get方法的)

private String timeid;
private double change_count;
private double wlan_count;
private double data_count;
private double send_count;
private double electricy_count;
private double platform_count;
private double totle_count;

public NetWorkFaultType(){}


public NetWorkFaultType(double change_count,double wlan_count,double data_count,double send_count,double electricy_count,double platform_count,double totle_count)
{
this.change_count=change_count;
this.wlan_count=wlan_count;
this.data_count=data_count;
this.send_count=send_count;
this.electricy_count=electricy_count;
this.platform_count=platform_count;
this.totle_count=totle_count;
}

这是我写的HQL语句:
String hql="select new cn.com.starit.local.persistence.po.NetWorkFaultType(sum(t.change_count),sum(t.wlan_count)," +
"sum(t.data_count),sum(t.send_count),sum(t.electricy_count),sum(t.platform_count),sum(t.totle_count)) from NetWorkFaultType t" +
" where timeid between '"+timeList.get(0)+"' and '"+timeList.get(1)+"'";

这是我实现查询的方法:(getSession()和beginTrans()方法是在父类中实现的)
public ArrayList<NetWorkFaultType> getNetFaultType(String hql)
{
ArrayList<NetWorkFaultType> list=new ArrayList<NetWorkFaultType>();
//获取session
session=getSession();
//开启事物
beginTrans(session);
//创建query对象
query=session.createQuery(hql);
//使用query进行查询
list=(ArrayList)query.list();

return list;
}

当执行到查询的时候就会报org.hibernate.QueryException: could not instantiate: cn.com.starit.local.persistence.po.NetWorkFaultType
这个错,一直停留在页面中。(当数据库中能查到值的时候就没问题,一旦没有值就会出现)

各位,想必hibernate都有所接触,帮个忙,怎么才能解决这个错误。
[解决办法]
list=(ArrayList)query.list();
错误可能是这样的:
当没有查询到数据时,某些字段的值为null,而返回结果强转为ArrayList<NetWorkFaultType>的时候NetWorkFaultType这个类中的某些属性设置了不能为空,导致创建NetWorkFaultType对象失败。
[解决办法]
错误是:无法实例化这个类。我估计是你构造方法的问题,因为你的构造方法中的参数是原生类型。不从数据库中查不到结果,hibernate就无法把空的结果集封装成这个类的实例。。。如果你的构造方法中的类型不是原生的,可能这个问题就不会出现了。。。
[解决办法]
引用:
Quote: 引用:

list=(ArrayList)query.list();
错误可能是这样的:
当没有查询到数据时,某些字段的值为null,而返回结果强转为ArrayList<NetWorkFaultType>的时候NetWorkFaultType这个类中的某些属性设置了不能为空,导致创建NetWorkFaultType对象失败。

我想我已经知道问题所在了,所以还是尽量少在hql中操作的好,我后来的做法是直接from这个对象,查出结果来,然后对得到的结果进行一系列动作,OK,问题解决。

赞一个,再给楼主提一个小建议,还可以在hibernate的DAO中通过hibernate模板获取session工厂,然后获取当前session或新打开一个session,然后执行原生sql.

热点排行