0

文字列(またはオブジェクト)の配列リストを休止状態で保存する方法について質問があります。ここを読んだので、Hibernate は arraylist の toString メソッドを呼び出して永続化しようとしているとのことでした。

テスト用の小さなコードを書きましたが、彼らが言ったようには機能しません。

class CustomizeArrayList extends ArrayList<String> 
    private static final long serialVersionUID = 1L;

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        System.out.println("To String of customize arraylist");
        return super.toString();
    }
}

私はこのタイプを次のように使用しています:

@Column("array")
private CustomizrArrayList array

toString メソッドを呼び出しているのではなく、リフレクションを使用して永続化またはシリアル化を行っていますか?

前もって感謝します!

4

1 に答える 1

0

Hibernate は、多くの内部 Java タイプとそれらの変換方法を認識しています。List型もその一つです。すべてのリストの種類 (リンク、配列ベース、またはカスタムのもの) に対して、Hibernate は基本的にリストのすべての要素を別のテーブルに配置しようとする同じリストベースのアプローチを使用します。

あなたはそれを望んでいません。目的を達成する 1 つの方法String[]は、カスタム型の代わりに (つまり、コレクションの代わりに基本的な配列型を) 使用することですが、別の場所で新しい問題が発生します。

正しい解決策は、このタイプの特別な処理が必要であることを Hibernate に伝えることです。インターフェイスを実装しますUserType( docs )。メソッドnullSafeGet()nullSafeSet()では、DB 列 (VARCHARだと思います) とCustomizeArrayList.

タイプを登録するには、「タイプ レジストリ」(こちらを参照)または@Type注釈(ブログ投稿)を使用できます。

于 2013-04-28T14:42:23.637 に答える