1

我正在努力解决这个问题:

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 转换为字符串。我该如何解决这个问题?

4

1 回答 1

1

如果您正在使用BYTEAcolumn 并且您的实体具有byte[],则不应使用org.hibernate.type.TextType. 它适用于 c(字符)lob,您使用的是字节而不是字符。

此外,还有许多方法可以将字节转换为字符,反之亦然,这些方法称为编码。我不相信我不知道正在使用哪种编码的静默转换。您最终可能会在没有意识到的情况下得到损坏的数据。

于 2018-02-07T17:32:20.377 回答