JPA "не может быть приведен к java.sql.Blob" - PullRequest
2 голосов
/ 07 марта 2011

Я использую JPA2 с Hibernate 3.6.1. и база данных Derby, и я использовал следующую аннотацию для большого двоичного объекта:

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

Hibernate создает правильный столбец BLOB-объектов, но если я пытаюсь сохранить сущность, я получаю следующее исключение:

java.lang.ClassCastException: [J не может быть приведен к java.sql.Blob

почему и как я могу заставить это работать?

Если я аннотирую это без @Lob, я получаю столбец «Varchar для битовых данных», который может содержать только до 32 м.

1 Ответ

8 голосов
/ 07 марта 2011

Необходимо сопоставить свойство как байт [], а не как длинный [].

Документация говорит

@ 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

...