adam bien's blog

New Java 8 Date and JPA 2.1 Integration 📎

JPA 2.1 does not directly support the java.time API. However, with an AttributeConverter implementation you can easily integrate Java 8 (or any other dates) with JPA:

import java.time.Instant;
import java.time.LocalDate;
import java.util.Date;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

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

    @Override
    public Date convertToDatabaseColumn(LocalDate date) {
        Instant instant = Instant.from(date);
        return Date.from(instant);
    }

    @Override
    public LocalDate convertToEntityAttribute(Date value) {
        Instant instant = value.toInstant();
        return LocalDate.from(instant);
    }
}


The @Converter(autoApply = true) will automatically activate the converter and keep your domain classes clean:

import java.time.LocalDate;

@Entity
public class Spaceship {

    @Id
    private long id;
    private String name;
    private int speed;
    private LocalDate arrival;
}

The example above was taken from Java 8 with Java EE 7. See you at http://airhacks.com or Virtual Dedicated Workshops / consulting!