1

私はこの問題に苦しんでいます:

org.hibernate.PropertyAccessException: fr.mypackage.MyClass.data のリフレクション セッターによってフィールド値を設定できませんでした

原因: java.lang.IllegalArgumentException: Can not set [B field fr.mypackage.MyClass.data to java.lang.String

上記の問題は、2 つの属性を持つエンティティである 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;

...

}

それは非常に単純に見えますが、唯一のトリッキーなことは、bytea である列 DATA です (私は PostgreSQL で作業しています)。問題は、Hibernate が bytea を String に変換するのに苦労していることです。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

BYTEA列を操作していて、エンティティに がある場合byte[]は、使用しないでくださいorg.hibernate.type.TextType。これは c(haracter)lobs 用です。文字ではなくバイトで作業しています。

さらに、バイトを文字に、またはその逆に変換する多くの方法があり、これらはエンコーディングと呼ばれます。どのエンコーディングが使用されているのかわからないサイレント変換は信用できません。気付かないうちにデータが破損する可能性があります。

于 2018-02-07T17:32:20.377 に答える