转自: http://hi.baidu.com/boyboy110/item/1e06d5df1af5384eddf9be13
看了一天的Hibernate自定义数据类型,报了三个错。
错误一:Could not determine type for: bean.EMailList, for columns: [org.hibernate.mapping.Column(email)]
错误原因:EMailList,是我自己定义的一个类,email是数据库表的一个字段。报这个错的原因是EMailList类没有序列化。
解决方法:将 public class EMailList implements EmpType {
改为 public class EMailList implements EmpType,Serializable {
就可以了。
错误二:org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.Short, got class java.lang.Integer
错误原因:是字段的数据类型匹配错误。我刚开始以为是hbm文件中字段的type属性配错了,但是hbm文件是自动生成的,不应该有问题。后来发现,是在执行方法时,将一个short类型的参数定义成了Integer。这里emp表主键的字段类型我定义为short。
解决方法:将 Emp emp = (Emp) session.load(Emp.class, new Integer("7369"));
改为 Emp emp = (Emp) session.load(Emp.class, new Short("7369"));
错误三:org.hibernate.type.SerializationException: could not deserialize
错误描述:在执行save方法后,我原本要插入的数据是“”,但是进入数据库后,值编程了“ACED0005737200136..”的字符串。并且在query时,会报上述错误。如果我将hbm中关于
<property name="email" type="bean.EMailList">
<column name="email" length="300" />
</property>
注释掉,就没有问题。
问题没有解决。