我正在使用JPA2和hibernate 3.6.1。和Derby数据库,我使用以下注释为blob:
@Column(length = Integer.MAX_VALUE)
@Lob
long[] bucket;
Hibernate会创建正确的blob列,但如果我尝试保存实体,则会出现以下异常:
java.lang.ClassCastException:[J无法强制转换为java.sql.Blob
为什么以及如何使这项工作成功?
如果我在没有@Lob的情况下对其进行注释,我会得到一个“Varchar for bit data”列,最多只能包含32米。
答案 0 :(得分:8)
您需要将属性映射为byte [],而不是long []。
@Lob表示该属性 应该坚持使用Blob或者 Clob取决于属性类型: java.sql.Clob,Character [],char []和 java.lang.String将保持不变 一个Clob。 java.sql.Blob,Byte [],byte [] 和可序列化的类型 坚持一个Blob。
如果属性类型实现 java.io.Serializable并不是一个 基本类型,如果属性不是 用@Lob注释,然后是 使用了Hibernate可序列化类型。
如果要保留数组,则需要构建自定义用户类型以转换数据类型。您可以在http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e2794
找到示例