栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate给出了一个奇怪的ClassCast异常(使用Transformers)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate给出了一个奇怪的ClassCast异常(使用Transformers)

最后,找到解决方案并不难,

我刚刚创建了自己的(自定义)ResultTransformer,并在setResultTransformer方法中进行了指定:

private Query createHibernateQueryForUnmappedTypeFactDto(String sqlQuery) throws HibernateException {    return FactCodeQueries.addScalars(createSQLQuery(sqlQuery)).setResultTransformer(new FactCodeDtoResultTransformer());    //return FactCodeQueries.addScalars(createSQLQuery(sqlQuery)).setResultTransformer(Transformers.aliasToBean(FactCodeDto.class));}

自定义结果转换器的代码:

package org.bamboomy.cjr.dao.factpre;import org.bamboomy.cjr.dto.FactCodeDto;import java.util.Date;import java.util.List;public class FactCodeDtoResultTransformer implements org.hibernate.transform.ResultTransformer {    @Override    public Object transformTuple(Object[] objects, String[] strings) {        FactCodeDto result = new FactCodeDto();        for (int i = 0; i < objects.length; i++) { setField(result, strings[i], objects[i]);        }        return result;    }    private void setField(FactCodeDto result, String string, Object object) {        if (string.equalsIgnoreCase("cdFact")) { result.setCdFact((String) object);        } else if (string.equalsIgnoreCase("cdFactSuffix")) { result.setCdFactSuffix((String) object);        } else if (string.equalsIgnoreCase("isSupplementCode")) { result.setIsSupplementCode((Boolean) object);        } else if (string.equalsIgnoreCase("isTitleCode")) { result.setIsTitleCode((Boolean) object);        } else if (string.equalsIgnoreCase("mustBeFollowed")) { result.setMustBeFollowed((Boolean) object);        } else if (string.equalsIgnoreCase("activeFrom")) { result.setActiveFrom((Date) object);        } else if (string.equalsIgnoreCase("activeTo")) { result.setActiveTo((Date) object);        } else if (string.equalsIgnoreCase("descFr")) { result.setDescFr((String) object);        } else if (string.equalsIgnoreCase("descNl")) { result.setDescNl((String) object);        } else if (string.equalsIgnoreCase("descDe")) { result.setDescDe((String) object);        } else if (string.equalsIgnoreCase("type")) { result.setType((String) object);        } else if (string.equalsIgnoreCase("idFact")) { result.setIdFact((Long) object);        } else if (string.equalsIgnoreCase("idParent")) { result.setIdParent((Long) object);        } else if (string.equalsIgnoreCase("isCode")) { result.setIsCode((Boolean) object);        } else { throw new RuntimeException("unknown field");        }    }    @Override    public List transformList(List list) {        return list;    }}

在hibernate3中,您可以将Aliasses设置为查询,但是在hibernate5中不能再执行此操作(如果我错了,请纠正我),因此aliasToBean是您只能在实际使用别名时使用的东西;我没有,所以例外。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382464.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号