开发者

JPA "cannot be cast to java.sql.Blob"

I'm using JPA2 with hibernate 3.6.1. and a Derby database and I used the following annotation for a blob:

@Column(length = Integer.MAX_VALUE)
@Lob
long[] bucket;

Hibernate creates the correct blob column but if I try to save an entity I get the following exception:

java.lang.ClassCastException: [J cannot be cast to java.sql.Blob

开发者_如何学运维why and how can I make this work?

If I annotate it without the @Lob I get a "Varchar for bit data" column which can only contain up to 32m.


You need to map the property as a byte[], not as long[].

The documentation says

@Lob indicates that the property should be persisted in a Blob or a Clob depending on the property type: java.sql.Clob, Character[], char[] and java.lang.String will be persisted in a Clob. java.sql.Blob, Byte[], byte[] and serializable type will be persisted in a Blob.

If the property type implements java.io.Serializable and is not a basic type, and if the property is not annotated with @Lob, then the Hibernate serializable type is used.

If you want to persist the array, you'll need to build a custom user type to transform the data type. You can find an example here http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e2794

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜