簡體   English   中英

如何將Joda Date持久保存到sql數據庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM