(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和实体中都有java LocalTime
,那么它可以工作,但它会持续时间和日期。我想只有时间。
我走过了前面不同的话题f.e. Joda-Time-Hibernate
所以我使用LocalTime
(在dto和实体中)注释@Type(type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime")
,但它没有用。
有人可以帮助我,dto,entity,table的专栏有哪些正确的类型(仅限时间),所以jackson可以序列化,hibernate理解并坚持。
答案 0 :(得分:0)
至于序列化,您必须将其添加到application.properties
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false
这样您就可以使用简单的日期表单映射(Java8要求)
我用LocatDate
birthday
存储的内容
Dependecy:
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