[英]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;
无需其他配置。 我从数据库中得到什么:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.