簡體   English   中英

如何在Mysql數據庫中建模java.time.duration

[英]How to model java.time.duration in Mysql Database

我正在編寫一個簡單的應用程序來了解Java EE,我需要將一個實體保存到我的MySQL數據庫中,該數據庫包含一個java.time.duration

存儲它的最佳方法是什么?

不幸的是, JPA仍然不支持新的java.time包的類型

也就是說,你有幾個方法( toStringparse )通過轉換為String提供了一種方法; VG

@Transient
private Duration myDuration;

@Column(name="DURATION")
String myDurationString;

@PostLoad
public void init() {
  this.myDuration = this.myDurationString == null ? null : Duration.parse(this.myDurationString);
};

public Duration getMyDuration() {
  return this.myDuration;
}

public void setMyDuration(Duration _myDuration) {
  this.myDurationString = _myDuration == null ? null : _myDuration.toString();
}

請記住,您不應該為myDurationString包含getter和getter。

或者,你可以使用toMillis()ofMillis()如果你是更舒適的毫秒數。

由於Hibernate 4.3支持JPA 2.1,您可以使用AttributeConverter類:

@Converter
public class DurationToStringConverter implements AttributeConverter<Duration, String>
{

    @Override
    public String convertToDatabaseColumn(Duration duration)
    {
        return duration == null ? null : duration.toString();
    }

    @Override
    public Duration convertToEntityAttribute(String dbData)
    {
        return dbData == null ? null : Duration.parse(dbData);
    }
}

@Entity
public class Ent {

    @Column
    @Convert(DurationToStringConverter.class)
    Duration duration;

}

請參閱: http//docs.oracle.com/javaee/7/api/javax/persistence/Convert.html

整數類型,長度根據需要。 使用靜態單位(即毫秒)或將單位存儲在單獨的字段中 - 如果您使用的是JPA2,則它具有枚舉字符串映射。

如果您使用的是JPA 2.1,您甚至可以使用@Converter ,從而無需在實體中使用轉換代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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