数据库字段定义为char(13),hibernate映射文件定义为:
<id name="isbn" type="java.lang.String">
<column name="ISBN" length="13" />
<generator class="assigned" />
</id>
当我要将isbn取出显示在下拉列表中时,怪问题来了,显示的总是isbn的第一个数字,明明isbn有十几个数字,但是却只显示了一个数字,开始我还以为是在那些daos,services中定义的方法返回类型不对导致的,检查一遍后发现都是对的,没办法,只能使用最笨的方法,将存放isbn的list对象全都打印出来看看,
public String detail(){
isbnList=videoService.AllIsbn();
shopList=shopService.getShopList();
for(int i=0;i<isbnList.size();i++){
System.err.println(isbnList.get(i).toString()+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
}
return SUCCESS;
}
重启服务器,运行下,悲剧了,报错了!
java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String
网上百度了下,发现原来是数据库字段定义的问题,解决方法如下:方法一:在sql代码中加入如下转换函数即可:select cast(isbn as varchar(13)) from video ,将isbn的类型转换为varchar类型;方法二:直接更改数据库代码,将isbn列的定义改为varchar(13)。改完后试了下,果然ok了,问题解决了!
但是还是有点不解:虽然数据库定义的字段为char(13),但是hibernate映射文件已经将该类型映射为了String类型啊,hql语句取数据的时候应该也会将类型转为String类型啊,为啥转换不过来呢???求解!