[英]How to model java.time.duration in Mysql Database
我正在編寫一個簡單的應用程序來了解Java EE,我需要將一個實體保存到我的MySQL數據庫中,該數據庫包含一個java.time.duration
。
存儲它的最佳方法是什么?
不幸的是, JPA仍然不支持新的java.time
包的類型
也就是說,你有幾個方法( toString
和parse
)通過轉換為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.