Невозможно установить [B поле fr.mypackage.MyClass.data в java.lang.String

Я борюсь с этой проблемой:

org.hibernate.PropertyAccessException: не удалось установить значение поля с помощью установщика отражения fr.mypackage.MyClass.data

Вызвано: java.lang.IllegalArgumentException: Невозможно установить для [поля B fr.mypackage.MyClass.data значение java.lang.String.

Проблема выше о MyClass, который является сущностью с двумя атрибутами:

@Entity
@Table(name = "TG_CLASS")
public class MyClass {

    @Id
    @Column(name = "ID")
    private long id;

    @Lob
    @Type(type = "org.hibernate.type.TextType")
    @Column(name = "DATA")
    private byte[] data;

...

}

Это выглядит довольно просто, единственная хитрость - это столбец DATA, который является байтой (я работаю в PostgreSQL), и проблема в том, что Hibernate борется с преобразованием байты в String. Как я могу решить эту проблему?

1 ответ

Решение

Если вы работаете с BYTEA столбец и ваша сущность имеет byte[], вы не должны использовать org.hibernate.type.TextType, Это для c (характерных) объектов, вы работаете с байтами, а не с символами.

Кроме того, существует много способов преобразования байтов в символы и наоборот, они называются кодировками. Я бы не стал доверять тихим конверсиям, где я не знаю, какая кодировка используется. Вы можете получить поврежденные данные, не осознавая этого.

Другие вопросы по тегам