JPA“无法转换为java.sql.Blob”

时间:2011-03-07 16:30:11

标签: java hibernate blob jpa-2.0 derby

我正在使用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米。

1 个答案:

答案 0 :(得分:8)

您需要将属性映射为byte [],而不是long []。

documentation

  

@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

找到示例