如何在Mysql数据库中建模java.time.duration

时间:2015-02-10 08:57:10

标签: java mysql java-ee

我正在编写一个简单的应用程序来了解Java EE,我需要将实体保存到我的MySQL DB中,其中包含java.time.duration

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

3 个答案:

答案 0 :(得分:4)

不幸的是,JPA still does not support the types of the new java.time package

那就是说,你有几种方法(toStringparse)为你提供了转换为String的方法; v.g。

@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()

答案 1 :(得分:4)

由于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

答案 2 :(得分:1)

整数类型,长度根据需要。要么使用静态单位(即毫秒),要么将单位存储在一个单独的字段中 - 如果你正在使用JPA2,它就会为此进行字符串映射。

如果你正在使用JPA 2.1,你甚至可以使用@Converter,从而无需在你的实体中使用转换代码。