如何将 Joda Date 保存到 sql 数据库?
How to persist Joda Date to sql database?
如何将 jodatime
YearMonth
对象保存到 sql 数据库?
@Entity
public class MyEntity {
private YearMonth date; //how to persist?
//some more properties
}
我希望以后能够选择特定月份的所有实体。
为此你需要 javax.persistence.Converter(参见 ):
@Entity
public class MyEntity {
@Convert(converter = YearMonthConverter.class)
private YearMonth date; //how to persist?
//some more properties
}
以下是 Java8 java.time.YearMonth 到 java.utilDate 的示例转换器。您需要将 java.time.YearMonth 更改为 org.joda.time.YearMonth 并使用适当的方法将 to/from 转换为所需的类型:
(省略进口):
@Converter(autoApply = true)
public class YearMonthConverter implements AttributeConverter<YearMonth, Date> {
@Override
public Date convertToDatabaseColumn(YearMonth attribute) {
// uses default zone since in the end only dates are needed
return attribute == null ? null : Date.from(attribute.atDay(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
}
@Override
public YearMonth convertToEntityAttribute(Date dbData) {
// TODO: check if Date -> YearMonth can't be done in a better way
if (dbData == null) return null;
Calendar calendar = Calendar.getInstance();
calendar.setTime(dbData);
return YearMonth.of(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1);
}
}
更好的问题是您打算如何使用数据库中的数据?通常,您希望使用目标数据库支持的数据类型将日期存储在数据库中,而不是字符串或复合整数。这将允许您使用内置数据库 date/time 函数和验证,而不是需要在您的应用程序中实现该逻辑。
您当然可以向您的实体添加方法,以将 to/from jodatime 值转换为您的实体,供您的应用程序需要它的部分使用。
如何将 jodatime
YearMonth
对象保存到 sql 数据库?
@Entity
public class MyEntity {
private YearMonth date; //how to persist?
//some more properties
}
我希望以后能够选择特定月份的所有实体。
为此你需要 javax.persistence.Converter(参见
@Entity
public class MyEntity {
@Convert(converter = YearMonthConverter.class)
private YearMonth date; //how to persist?
//some more properties
}
以下是 Java8 java.time.YearMonth 到 java.utilDate 的示例转换器。您需要将 java.time.YearMonth 更改为 org.joda.time.YearMonth 并使用适当的方法将 to/from 转换为所需的类型: (省略进口):
@Converter(autoApply = true)
public class YearMonthConverter implements AttributeConverter<YearMonth, Date> {
@Override
public Date convertToDatabaseColumn(YearMonth attribute) {
// uses default zone since in the end only dates are needed
return attribute == null ? null : Date.from(attribute.atDay(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
}
@Override
public YearMonth convertToEntityAttribute(Date dbData) {
// TODO: check if Date -> YearMonth can't be done in a better way
if (dbData == null) return null;
Calendar calendar = Calendar.getInstance();
calendar.setTime(dbData);
return YearMonth.of(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1);
}
}
更好的问题是您打算如何使用数据库中的数据?通常,您希望使用目标数据库支持的数据类型将日期存储在数据库中,而不是字符串或复合整数。这将允许您使用内置数据库 date/time 函数和验证,而不是需要在您的应用程序中实现该逻辑。
您当然可以向您的实体添加方法,以将 to/from jodatime 值转换为您的实体,供您的应用程序需要它的部分使用。