Phi*_*ipp 8 spring hibernate jpa h2 java-time
我使用Spring boot 1.4.2,它带来了hibernate 5.0.11(JPA 2.1).我想在我的实体中使用Java 8时间类,因此包括在内hibernate-java8.
我的实体定义了LocalDate字段.
@Entity
@Table(name = "my_alarms_timeline", indexes = {...})
public class MyAlarm {
...
@Column(name = "validity_date")
@NotNull
private LocalDate validityDate;
}
Run Code Online (Sandbox Code Playgroud)
我希望这会映射到H2数据库中的DATE.
在我的数据库中,我将其声明为validity_date DATE NOT NULL,.
当我尝试运行测试时,出现以下错误:
validity_date TIMESTAMP NOT NULL,
令我惊讶的是,如果我将数据库定义更改为" hibernate-java8 我得到错误"
AttributeConverter<LocalDate, java.sql.Date>
这只是前一个的反向信息.
我也试过,而不是包括LocalDateTime,使用一个,hibernate-java8但这会产生相同的错误结果.
我该怎么做,以便我的LocalDate正确映射到数据库中的DATE?
我也试过一个validity_date DATE NOT NULL,映射到TIMESTAMP 的字段,这没有问题......
Phi*_*ipp 16
所以我通过columnDefinition="DATE"在@Column注释中添加一个来运行它.
@Entity
@Table(name = "my_alarms_timeline", indexes = {...})
public class MyAlarm {
...
@Column(name = "validity_date", columnDefinition = "DATE")
@NotNull
private LocalDate validityDate;
}
Run Code Online (Sandbox Code Playgroud)
不知道为什么没有其他人看到这个问题......
我没有在 Spring 中使用过它,但在“标准”JPA 中,我做了类似的事情:
@Converter(autoApply = true)
public class OffsetDateTimeAttributeConverter implements AttributeConverter<OffsetDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(OffsetDateTime entityValue) {
if( entityValue == null )
return null;
return Timestamp.from(Instant.from(entityValue));
}
@Override
public OffsetDateTime convertToEntityAttribute(Timestamp databaseValue) {
if( databaseValue == null )
return null;
return OffsetDateTime.parse(databaseValue.toInstant().toString());
}
}
Run Code Online (Sandbox Code Playgroud)
我的表有“带有时区的时间戳”列。然后我的 @Entity 使用 OffsetDateTime。您应该能够使用类似的方法在数据类型之间进行转换。
| 归档时间: |
|
| 查看次数: |
13707 次 |
| 最近记录: |