0

我需要使用JPA 中的列类型在DATETIMEMariaDB 中创建列。LocalDateTime

我创建了这个实体:

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

这个问题有什么解决办法吗?例如,有没有办法在DATETIME不使用的情况下将列类型设置为实体@Temporal

4

1 回答 1

3

如果要将 a 存储LocalDateTimeTIMESTAMP列中,则需要实现到 的映射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());
    }
}
于 2018-10-06T10:34:24.267 回答