No Java 8 foi disponibilizado a nova API de datas, java.time.*, a qual é baseada no JodaTime. Mas como utilizar essa API no contexto de javaEE ? Sabendo que o EE atual é 7, ou seja, possui suporte apenas até o jdk7.
Para que isso seja possível, precisamos criar um conversor de atributo do JPA, para que quando mapeado um LocalDate em entidades, será convertido em um Date, o qual o JPA tem suporte de persistência.
import javax.persistence.AttributeConverter; import javax.persistence.Converter; import java.sql.Date; import java.time.LocalDate; @Converter(autoApply = true) public class LocalDatePersistenceConverter implements AttributeConverter<LocalDate, Date> { @Override public java.sql.Date convertToDatabaseColumn(LocalDate entityValue) { return java.sql.Date.valueOf(entityValue); } @Override public LocalDate convertToEntityAttribute(java.sql.Date databaseValue) { return databaseValue.toLocalDate(); } }
- @Converter: Marca a classe como um conversor de atributos para entidades;
- autoApply = true: Aplica o conversor automaticamente para todos atributos definido no X do AttributeConverter;
- AttributeConverter: Implementa um conversor de atributo, onde X é o tipo esperado e Y é o tipo convertido;
- convertToDatabaseColumn: Define a conversão de X para Y;
- convertToEntityAttribute: Define a conversão de y para X.