【问题标题】:Can not set [B field fr.mypackage.MyClass.data to java.lang.String无法将 [B 字段 fr.mypackage.MyClass.data 设置为 java.lang.String
【发布时间】:2018-07-18 02:22:36
【问题描述】:

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

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。我该如何解决这个问题?

【问题讨论】:

    标签: java postgresql hibernate jpa bytea


    【解决方案1】:

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

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

    【讨论】:

    • 确实,问题出在 org.hibernate.type.TextType 上。我将其更改为 org.hibernate.type.BinaryType,它现在工作得很好!谢谢!
    • 你需要注释吗?如果完全省略,会推断出什么类型?
    • 没有任何注释,我有一个异常 org.postgresql.util.PSQLException: bad value for type long
    • 啊好吧,就是这个问题:stackoverflow.com/questions/12647755/…
    • 没错,这就是我尝试@Type(type = "org.hibernate.type.TextType") 的方式,谢谢!
    猜你喜欢
    • 2016-01-23
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-10-30
    • 2016-09-05
    • 2014-09-01
    • 2021-06-20
    • 2019-11-13
    相关资源
    最近更新 更多