无法将 [B 字段 fr.mypackage.MyClass.data 设置为 java.lang.String

Can not set [B field fr.mypackage.MyClass.data to java.lang.String

我正在为这个问题苦苦挣扎:

org.hibernate.PropertyAccessException: could not set a field value by reflection setter of fr.mypackage.MyClass.data

Caused by: java.lang.IllegalArgumentException: Can not set [B field fr.mypackage.MyClass.data to 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。我该如何解决这个问题?

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

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