1

私は休止状態の注釈を使用しています。

私のPOJOには、intである年フィールドがあります。

この値を DB の char(4) 列に保持し、休止状態で型を前後に変換したいと考えています。これを簡単に実行できる方法はありますか (@Type アノテーションを調べ始めましたが、可能であれば独自のカスタム型を作成する必要はありません)。

4

2 に答える 2

6

DB の char(4) 列にマップされた POJO のフィールドがプロパティによってアクセスされる場合、hibernate はデータベースと POJO 間のマッピングのためにセッターとゲッターを呼び出します。したがって、変換ロジックは、このプロパティのセッターとゲッター内に実装できます。に加えて、 intDate は @Transient としてマークして、hibernate にこのフィールドのマッピングを無視するように指示する必要があります。

public class TableABC {

    private int id;
    private int intDate;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(length=4) 
    private  String getCharDate() {
        return String.valueOf(this.intDate);
    }

    private void setCharDate(String charDate) {
        try {
            this.intDate = Integer.parseInt(charDate);
        } catch (NumberFormatException e) {
            //Logic to handle when charDate cannot convert to integer 
            this.intDate = 0;
        }
    }

    @Transient
    public int getIntDate() {
        return intDate;
    }

    public void setIntDate(int intDate) {
        this.intDate = intDate;
    }

}
于 2011-02-24T05:50:01.317 に答える
1

Hibernate ソースを簡単に検索しましたが、そのために使用できるタイプはないと思います。

https://github.com/hibernate/hibernate-core/tree/master/hibernate-core/src/main/java/org/hibernate/type

しかし、思ったほど難しくはないので、独自の Type (おそらく Year 型?) を実装することをお勧めします :-)

セッターで変換を処理するもう1つの解決策もオプションですが、多くのテストとパフォーマンス測定がなければそれを行うことはできません。

于 2011-02-24T06:11:14.570 に答える