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条记录)。
请问我应该怎样做呢? 展开
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条记录)。
请问我应该怎样做呢? 展开
1个回答
展开全部
大致提到了两种解决办法,一个是利用数据库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如果映射
第二种办法就是继承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如果映射
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询