【问题标题】:LocalDateTime JPA - Java 8本地日期时间 JPA - Java 8
【发布时间】:2020-03-09 09:57:57
【问题描述】:

当我的字段被 JPA 保存时,在某些时间它会保存日期广告时间正确,而其他时间则不保存,只有日期正确,但时间为零 (00:00:00)。

更正:13/11/2019 11:05:12
不正确:13/11/2019 00:00:00

我的数据库是 postgresql,我的字段类型是 timestamp

在 java 类中,我的字段是这样注释的:

@Column(name = "DAT_ACTION")
private LocalDateTime espDatAction;

我现在不知道发生了什么,因为应用程序的操作是相同的,并且具有不同的行为

【问题讨论】:

  • user @Temporal 在 JPA 中,可用于在数据库表中存储以下列项:DATE (java.sql.Date),TIME (java.sql.Time),TIMESTAMP (java.sql.Timestamp)

标签: java hibernate jpa jpa-2.0 postgresql-9.4


【解决方案1】:

在 JPA 2.2 新版本中使用这种方式

import com.fasterxml.jackson.annotation.JsonFormat;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="dd/MM/yyyy HH:mm:ss")
private LocalDateTime espDatAction;

【讨论】:

  • 这种方法适用于我休息时的对象序列化。我想将我的日期时间保存到数据库中。我相信您的建议虽然很好,但不适用于我的情况。
【解决方案2】:

如果要在 DATE 列中存储 LocalDate 属性或在 TIMESTAMP 列中存储 LocalDateTime,则需要自己定义到 java.sql.Date 或 java.sql.Timestamp 的映射。您可以尝试添加类似下面的内容并重新启动应用程序,之后应该会正确保存:

import java.time.LocalDateTime;
import java.sql.Timestamp;
 
@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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-28
    • 2014-11-08
    • 2016-09-07
    • 1970-01-01
    • 2014-07-06
    • 2021-01-02
    • 2015-06-26
    相关资源
    最近更新 更多