在 JPA 中使用 LocalDateTime 列类型在 MariaDB 中创建 DATETIME
Create DATETIME in MariaDB using LocalDateTime column type in JPA
我需要使用 JPA 中的 LocalDateTime
列类型在 MariaDB 中创建 DATETIME
列。
我创建了这个实体:
@Column
private LocalDateTime created_at;
但是当我存储代码时,MariDB 中的列更新为 DATE
。我需要 DATETIME
.
我也试过这个:
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime created_at;
但是当我部署代码时出现错误:
@Temporal should only be set on a java.util.Date or java.util.Calendar property
我使用 Java 10 和 spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath />
</parent>
这个问题有什么解决办法吗?例如,有没有一种方法可以在不使用 @Temporal
的情况下将列类型设置为 DATETIME
实体?
如果要将 LocalDateTime
存储在 TIMESTAMP
列中,则需要实现到 java.sql.Timestamp
的映射。
您需要实现 AttributeConverter 接口。
@Converter(autoApply = true)
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime locDateTime) {
return (locDateTime == null ? null : Timestamp.valueOf(locDateTime));
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp sqlTimestamp) {
return (sqlTimestamp == null ? null : sqlTimestamp.toLocalDateTime());
}
}
我需要使用 JPA 中的 LocalDateTime
列类型在 MariaDB 中创建 DATETIME
列。
我创建了这个实体:
@Column
private LocalDateTime created_at;
但是当我存储代码时,MariDB 中的列更新为 DATE
。我需要 DATETIME
.
我也试过这个:
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime created_at;
但是当我部署代码时出现错误:
@Temporal should only be set on a java.util.Date or java.util.Calendar property
我使用 Java 10 和 spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath />
</parent>
这个问题有什么解决办法吗?例如,有没有一种方法可以在不使用 @Temporal
的情况下将列类型设置为 DATETIME
实体?
如果要将 LocalDateTime
存储在 TIMESTAMP
列中,则需要实现到 java.sql.Timestamp
的映射。
您需要实现 AttributeConverter 接口。
@Converter(autoApply = true)
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime locDateTime) {
return (locDateTime == null ? null : Timestamp.valueOf(locDateTime));
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp sqlTimestamp) {
return (sqlTimestamp == null ? null : sqlTimestamp.toLocalDateTime());
}
}