IllegalArgumentException:无法将java.time.LocalDateTime字段设置为java.sql.Timestamp

时间:2018-03-19 07:31:38

标签: hibernate spring-boot h2

我正在做自学的测试任务。 我的堆栈是Spring Boot / H2 date base / Hibernate

我喜欢REST-full服务(实际上它不是,现在我正在尝试修复它)

我被告知我有很多错误的代码决策和错误,所以我决定修复它。 工作项目的初始状态是 - https://github.com/iliapastushenko/testtaskREST

我开始重构那个和我做过的第一件事 - 摆脱 jackson-datatype-jsr310因为它对我来说实际上是多余的 - 我已经从POM和ClientappApplication类中删除它并编辑了我的Application类字段" dateCreated":

@DateTimeFormat(pattern = "dd-MM-yyyy hh:mm:ss")
@Type(type="timestamp")
private LocalDateTime dateCreated;

所以,当我试图通过前端获得所需客户端的一个应用程序时 我得到这种类型的例外:

java.lang.IllegalArgumentException: Can not set java.time.LocalDateTime 
field root.Model.Application.dateCreated to java.sql.Timestamp
你能不能给我一个提示 - 出了什么问题?

2 个答案:

答案 0 :(得分:0)

使用hibernate-convertors将LocalDateTime转换为java.sql.Timestamp。您可以创建一个如下所示的休眠转换器:

@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {

@Override
public Date convertToDatabaseColumn(LocalDate locDate) {
    return (locDate == null ? null : Date.valueOf(locDate));
}

@Override
public LocalDate convertToEntityAttribute(Date sqlDate) {
    return (sqlDate == null ? null : sqlDate.toLocalDate());
}
}

有关详细信息,请查看此处:https://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/

答案 1 :(得分:0)

按属性修正:

<hibernate.version>5.2.12.Final</hibernate.version>

所以,自从Hibernate 5.2以来,LocalDateTime一切正常,而不是我之前被告知的Hibernate 5.0。