我想保留 joda-time 类型 YearMonth,但找不到任何可用的持久类型(请参阅 here )将其存储到一列中?
是否有任何 Hibernate 类型可以直接用于此目的?
非常感谢。
由于我在网络上找不到任何解决方案,我们实现了自己的自定义 hibernate 类型,使用表示数据库中 YearMonth 的 Integer 类型
步骤如下:
1- 创建持久类PercientYearMonth
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")
我是一名优秀的程序员,十分优秀!