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";
2 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
看一下类文件pid和数据库的的数据类型一致不
我在数据库中试了一下,ifnull()函数MySQL是可以通过的,Integer是包装类类型的,楼主不妨改为int类型试试,还有,如果楼主用到了ChannelTree.hbm.xml配置文件,那么该配置文件中不要限制一个字段的长度和类型,也就是,Type和length属性不要配置,改为即可
开满天机
TA贡献1786条经验 获得超13个赞
六、case ... when ... then ... else .... end (等价于java中的switch语句)
case
when (条件表达式1) then 语句1
when (条件表达式2) then 语句2
else 语句N
end
添加回答
举报
0/150
提交
取消