1

我想保留 joda-time 类型 YearMonth 但我找不到任何可用的持久类型(请参见此处)将其存储到一列中?

是否有任何 Hibernate 类型可以直接用于此目的?

非常感谢你。

4

1 回答 1

1

由于我在网上找不到任何解决方案,我们实现了我们自己的自定义休眠类型,使用表示数据库中 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 回答