无法将 [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,您使用的是字节而不是字符。
此外,还有很多方法可以将字节转换为字符,反之亦然,这些称为编码。在我不知道使用哪种编码的情况下,我不会相信静默转换。您可能会在不知不觉中得到损坏的数据。
我正在为这个问题苦苦挣扎:
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,您使用的是字节而不是字符。
此外,还有很多方法可以将字节转换为字符,反之亦然,这些称为编码。在我不知道使用哪种编码的情况下,我不会相信静默转换。您可能会在不知不觉中得到损坏的数据。