【问题标题】:Persist time with hibernate and java用hibernate和java坚持时间
【发布时间】:2017-10-18 16:30:59
【问题描述】:

(Spring 应用程序 - 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 和实体中有 java LocalTime 时,它可以工作,但它会同时保留时间和日期。我只想有时间。

我浏览了以前的不同主题 f.e. Joda-Time-Hibernate 所以我使用 LocalTime(在 dto 和实体中)和注释 @Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime") 但它不起作用。

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

【问题讨论】:

标签: java hibernate jpa


【解决方案1】:

至于序列化,您必须将其添加到您的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;

无需额外配置。我在数据库中得到了什么:

birthday 的类型是date

有日期和时间我用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

【讨论】:

  • 对于@Column private LocalTime time;(实体)和MySQL TIME我得到:found [time (Types#TIME)], but expecting [datetime (Types#TIMESTAMP)
  • 是的,尝试添加。
  • 出了点问题。它一直在说:found [time (Types#TIME)], but expecting [datetime (Types#TIMESTAMP)] 而我的应用程序不想运行
  • OFC 显然在方案验证期间启动失败。共享您的 POM 或构建文件
  • 有什么我可以自己检查的吗? (我不确定是否可以公开该 pom 文件)
猜你喜欢
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多