1

joda-time 型 YearMonth を永続化したいのですが、それを 1 つの列に格納するために使用できる永続型が見つかりませんでした (こちらを参照)。

この目的で簡単に使用できる Hibernate タイプはありますか?

どうもありがとうございました。

4

1 に答える 1

1

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")
于 2013-04-10T11:49:50.863 に答える