joda-time 型 YearMonth を永続化したいのですが、それを 1 つの列に格納するために使用できる永続型が見つかりませんでした (こちらを参照)。
この目的で簡単に使用できる Hibernate タイプはありますか?
どうもありがとうございました。
Web 上で解決策が見つからなかったため、DB で YearMonth を表す整数型を使用して、独自のカスタム休止状態型を実装しました。
手順は次のとおりです。
1-永続クラスを作成しますPersistentYearMonth
public class PersistentYearMonth extends AbstractSingleColumnUserType<YearMonth, Integer, IntegerColumnYearMonthMapper> {
private static final long serialVersionUID = -4204097887942539571L;
}
2- マッパーを作成するIntegerColumnYearMonthMapper
public class IntegerColumnYearMonthMapper extends AbstractIntegerColumnMapper<YearMonth> {
private static final long serialVersionUID = -9060971007814071116L;
@Override
public YearMonth fromNonNullString(String s) {
return YearMonth.parse(s, DateTimeFormat.forPattern("yyyyMM"));
}
@Override
public YearMonth fromNonNullValue(Integer value) {
return fromNonNullString(value.toString());
}
@Override
public String toNonNullString(YearMonth value) {
return value.toString( DateTimeFormat.forPattern("yyyyMM"));
}
@Override
public Integer toNonNullValue(YearMonth value) {
return Integer.valueOf(toNonNullString(value));
}
}
3- XML hibernate マッピングを使用する場合はhbm.xml
、必要に応じてカスタム タイプをファイルに登録します。
<property name="monthOfYear" type="org.jadira.usertype.dateandtime.joda.PersistentYearMonth" />
または、注釈を使用している場合は、次のように登録します。
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentYearMonth")