我想保留 joda-time 类型 YearMonth 但我找不到任何可用的持久类型(请参见此处)将其存储到一列中?
是否有任何 Hibernate 类型可以直接用于此目的?
非常感谢你。
由于我在网上找不到任何解决方案,我们实现了我们自己的自定义休眠类型,使用表示数据库中 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")