2017-03-25 4 views
0

Ich benutze Frühjahr Boot mit mysqlFederverschluß, jackson und LOCALDATE

in meinem application.properties

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

In meinem build.gradle ich

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' 

In meiner Java-Klasse haben

import java.time.LocalDate;

@Entity 
public class WebSite implements Serializable{ 

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

    private LocalDate date; 
    ... 
} 

Wenn diese Tabelle,

erstellt

Datumsfeld wie ein TINYBLOB erstellt

Warum nicht ein Datum ist

Antwort

1

Das mit Jackson kein Thema ist, sondern dass das, was Sie für ORM verwenden, weiß nicht, wie man ein Java LocalDate in ein MySQL Date umwandelt.

Es gibt zwei Möglichkeiten, dies zu tun. Wenn Sie Hibernate verwenden, fügen Sie einfach org.hibernate:hibernate-java8 in Ihre Abhängigkeiten ein.

Wenn Sie nur JPA verwenden möchten, müssen Sie alternativ einen Attributkonverter erstellen. Beispiel:

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

Der Attributkonverter wird die Konvertierung zwischen einem Java LocalDate und MySQL Date verarbeiten.

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