1
我想堅持喬達時間型YearMonth,但我找不到任何可用的持久類型(請參閱here)將其存儲到一列中?如何從joda時間將YearMonth類型的屬性保存到一列中?
是否有任何Hibernate類型可以直接用於此目的?
非常感謝。
我想堅持喬達時間型YearMonth,但我找不到任何可用的持久類型(請參閱here)將其存儲到一列中?如何從joda時間將YearMonth類型的屬性保存到一列中?
是否有任何Hibernate類型可以直接用於此目的?
非常感謝。
因爲我無法找到網絡上的任何解決方案,我們已經實現了自己的定製Hibernate類型,使用表示在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映射,在需要的時候
<property name="monthOfYear" type="org.jadira.usertype.dateandtime.joda.PersistentYearMonth" />
註冊自定義類型到hbm.xml
文件,或者如果您有註釋,註冊爲這樣:
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentYearMonth")
不錯! 雖然應該可以創建一個更通用的轉換器來存儲Partial的ISO-8601字符串。但即使是喬達的ISODateTimeFormat也不夠通用。 – greyfairer 2013-04-10 12:08:36