我正在努力解决这个问题:
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是一个bytea(我在PostgreSQL中工作),问题来自于Hibernate在将bytea转换为String时遇到的困难。我该如何解决这个问题?
答案 0 :(得分:1)
如果您正在使用BYTEA
列并且您的实体有byte[]
,则您不应该使用org.hibernate.type.TextType
。它适用于c(haracter)lobs,你使用的是字节而不是字符。
此外,有许多方法可以将字节转换为字符,反之亦然,这些称为编码。我不相信无声转换,我不知道正在使用哪种编码。你可能会在没有意识到的情况下最终得到损坏的数据。