繁体   English   中英

使用Hibernate和Java保持时间

[英]Persist time with hibernate and java

(Spring app-MVC)我用列定义了一个表:

`time` TIME NOT NULL,

在实体类中,我有:

@Getter @Setter
@NotNull
private java.sql.Time time;

在我的DTO课程中,我有:

@Getter @Setter
private java.sql.Time time;

当我从邮递员发送"time": "12:10" ,我得到: com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple type, class java.sql.Time] value failed: null (through reference chain: (<points to a field (of java.sql.Time) in my aforementioned DTO class>))

当我在MySQL中具有TIMESTAMP时,在dto和entity中都具有java LocalTime ,则它可以工作,但它同时保留了时间和日期。 我只想有时间。

我在Joda-Time-Hibernate遍历了先前的不同主题,因此我在LocalTime (在dto和实体中)使用了@Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime")批注,但没有用。

有人可以帮助我,什么是dto,实体,表的列的正确类型(仅时间),以便杰克逊可以序列化,休眠以理解和持久化。

至于序列化,您必须将其添加到您的application.properties

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false

这样,您将允许简单的日期表单映射(Java8要求)

我用来将LocatDate存储为birthday

依赖度:

compile('org.hibernate:hibernate-java8:5.0.12.Final')

在实体类中

@Column
private LocalDate birthday;

无需其他配置。 我从数据库中得到什么:

在此处输入图片说明

birthdaydate类型

在此处输入图片说明

要使用日期和时间,请使用“ Instant

@Data
@MappedSuperclass
public abstract class TimestampedEntity extends AbstractEntity {

    @Column(updatable = false)
    @Setter(value = AccessLevel.PRIVATE)
    private Instant createdAt;

    @Column
    @Setter(value = AccessLevel.PRIVATE)
    private Instant modifiedAt;

    @PrePersist
    private void beforeCreation() {
        this.setCreatedAt(Instant.now());
    }

    @PreUpdate
    private void beforeUpdate() {
        this.setModifiedAt(Instant.now());
    }

}

并且在数据库中作为Timestamp保留。

PS。 我正在使用Spring + JPA + Hibernate + MySQL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM