hibernate 查询语句,查询出来的数据格式转换问题

我用的是mysql数据库,其中的一张表里有一个叫mainMarkId的字段,当时定义的是UUID值,所以类型是char(32)。下面是我的hql语句:Queryquery... 我用的是mysql数据库,其中的一张表里有一个叫mainMarkId的字段,当时定义的是UUID值,所以类型是char(32)。下面是我的hql语句:
Query query = getSession().createSQLQuery("
select distinct mainMarkId from utrs_application_link where applicationId='402881e53758ab14013758b42983000f'");

List<String> mainMarkIdList = query.list();

但是会有异常:java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String

我是想把查出的一些值,以String类型保存到list中。
我在mysql控制台输入上面的查询语句就会显示出如图片所示的效果(共23条记录)。

请问我应该怎样做呢?
展开
 我来答
bd9006
2012-05-18 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
大致提到了两种解决办法,一个是利用数据库CAST函数,select cast( cccode as varchar)——cccode 是char(3),这个办法对于MYSQL无效,因为MYSQL的cast方法无法完成CHAR到VARCHAR的转换;

第二种办法就是继承MYSQL的dialect,在Hibernate中将CHAR(N)都注册为String类型

Java代码 收藏代码

public class FixedMySQL5InnoDBDialect extends MySQL5InnoDBDialect{
protected void registerVarcharTypes() {
super.registerVarcharTypes();
registerColumnType(Types.CHAR, 255, "char($l)");
registerHibernateType( Types.CHAR, Hibernate.STRING.getName() );
}
}

经过测试,第二种办法非常完美

另外:

如果只select一个属性的话,可以使用SQLQuery的addScalar("code",HIbernate.STRING);

但是多了的话,就需要将所有属性全部以这种方式告诉Hibernate如果映射
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式