2013-04-09 21 views

回答

1

因爲我無法找到網絡上的任何解決方案,我們已經實現了自己的定製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") 
+0

不錯! 雖然應該可以創建一個更通用的轉換器來存儲Partial的ISO-8601字符串。但即使是喬達的ISODateTimeFormat也不夠通用。 – greyfairer 2013-04-10 12:08:36

相關問題