Невозможно установить [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 (характерных) объектов, вы работаете с байтами, а не с символами.
Кроме того, существует много способов преобразования байтов в символы и наоборот, они называются кодировками. Я бы не стал доверять тихим конверсиям, где я не знаю, какая кодировка используется. Вы можете получить поврежденные данные, не осознавая этого.