为什么执行的时候会报如下的错误呢?

Dto:class ChannelTree {Integer id,String name,Integer pid.........}

ChannelDao 继承BaseDao:
public List<ChannelTree> generateTree() {
String sql = "select id,name,ifnull(pid,0) pid from t_channel order by orders";
List<ChannelTree> cts = this.queryBySQL(sql, ChannelTree.class, false);
return cts;
}
BaseDao中的queryBySQL方法如下:
public <N extends Object> List<N> queryBySQL(String sql, Object[] args,
Map<String, Object> alias, Class<?> clz, boolean hasEntity) {
sql=getOrderHql(sql);
SQLQuery query=getSession().createSQLQuery(sql);
setAlias(query, alias);
setArgs(query, args);
if(hasEntity){
query.addEntity(clz);
}else{
query.setResultTransformer(Transformers.aliasToBean(clz));
}
return query.list();
}
MYSQL数据库中pid有为空的记录

为什么执行的时候会报
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of org.jy.cms.model.ChannelTree.pid
如果把sql中的ifnull函数去掉则测试通过:String sql = "select id,name,pid from t_channel order by orders";

月关宝盒
浏览 114回答 2
2回答

牧羊人nacy

看一下类文件pid和数据库的的数据类型一致不我在数据库中试了一下,ifnull()函数MySQL是可以通过的,Integer是包装类类型的,楼主不妨改为int类型试试,还有,如果楼主用到了ChannelTree.hbm.xml配置文件,那么该配置文件中不要限制一个字段的长度和类型,也就是,Type和length属性不要配置,改为即可

开满天机

六、case ... when ... then ... else .... end (等价于java中的switch语句)casewhen (条件表达式1) then 语句1when (条件表达式2) then 语句2else 语句Nend
打开App,查看更多内容
随时随地看视频慕课网APP