私は休止状態の注釈を使用しています。
私のPOJOには、intである年フィールドがあります。
この値を DB の char(4) 列に保持し、休止状態で型を前後に変換したいと考えています。これを簡単に実行できる方法はありますか (@Type アノテーションを調べ始めましたが、可能であれば独自のカスタム型を作成する必要はありません)。
私は休止状態の注釈を使用しています。
私のPOJOには、intである年フィールドがあります。
この値を DB の char(4) 列に保持し、休止状態で型を前後に変換したいと考えています。これを簡単に実行できる方法はありますか (@Type アノテーションを調べ始めましたが、可能であれば独自のカスタム型を作成する必要はありません)。
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;
}
}
Hibernate ソースを簡単に検索しましたが、そのために使用できるタイプはないと思います。
しかし、思ったほど難しくはないので、独自の Type (おそらく Year 型?) を実装することをお勧めします :-)
セッターで変換を処理するもう1つの解決策もオプションですが、多くのテストとパフォーマンス測定がなければそれを行うことはできません。