[英]How to persist Joda Date to sql database?
如何將jodatime
YearMonth
對象持久jodatime
到sql數據庫?
@Entity
public class MyEntity {
private YearMonth date; //how to persist?
//some more properties
}
我希望以后能夠在特定月份選擇所有實體。
更好的問題是您打算如何使用數據庫中的數據? 通常,您要使用目標數據庫支持的數據類型(而不是字符串或復合整數)將日期存儲在數據庫中。 這樣一來,您就可以使用內置的數據庫日期/時間函數和驗證,而無需在應用程序中實現該邏輯。
您當然可以為您的實體添加方法,以將應用程序中需要它的部分的jodatime值與您的實體進行轉換。
為此,您需要一個javax.persistence.Converter(請參閱如何將java.util.Date轉換為Java8 java.time.YearMonth ):
@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,並使用適當的方法將其轉換為所需的類型:(省略導入):
@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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.