1

我在 mysql 中使用 spring boot

在我的 application.properties

spring.jpa.generate-ddl=true
spring.jackson.serialization.write-dates-as-timestamps=false

在我的 build.gradle 我有

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-data-rest')
compile('org.springframework.boot:spring-boot-starter-web')
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

在我的 java 类中

导入 java.time.LocalDate;

@Entity
public class WebSite implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long webSiteId;

    private LocalDate date;
    ...
}

创建此表时,

日期字段像 TINYBLOB 一样创建

为什么不是日期

4

1 回答 1

1

这不是 Jackson 的问题,而是您用于 ORM 的任何东西都不知道如何将 Java LocalDate 转换为 MySQL Date。

有两种方法可以做到这一点。如果您使用的是 Hibernate,您只需包含org.hibernate:hibernate-java8在您的依赖项中。

或者,如果您只想使用 JPA,则需要创建一个属性转换器。例如:

@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());
    }
}

属性转换器将处理 Java LocalDate 和 MySQL 日期之间的转换。

见:http ://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/

于 2017-03-25T23:05:37.003 回答