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

时间:2018-02-07 17:24:30

标签: java postgresql hibernate jpa bytea

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

  

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时遇到的困难。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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