Quando
o JPA 2.1 foi lançado o Java 8 ainda não tinha saído, então algumas features
ficaram prejudicadas. Porém para nossa felicidade, o JPA 2.1 tem conversores
que nos permitem dizer ao JPA como mapear tipos de dados. A seguir vou mostrar
como mapear então o LocalDate e o LocalDateTime:
@Entity
public class Pedido {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Column
private LocalDate dataPrevisaoEntrega;
@Column
private LocalDateTime dataPedido;
...
}
Um conversor deve implementar a interface javax.persistence.AttributeConverter<X,Y>,
passando a classe da entidade em X e classe do banco de dados em Y. O conversor
também precisa ser anotado com javax.persistence.Converter. Seguem os
conversores:
@Converter(autoApply = true)
public class LocalDateConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate localDate) {
return (localDate == null ? null : Date.valueOf(localDate));
}
@Override
public LocalDate convertToEntityAttribute(Date sqlDate) {
return (sqlDate == null ? null : sqlDate.toLocalDate());
}
}
@Converter(autoApply = true)
public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime localDateTime) {
return (localDateTime == null ? null : Timestamp.valueOf(localDateTime));
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp sqlTimestamp) {
return (sqlTimestamp == null ? null : sqlTimestamp.toLocalDateTime());
}
}
Perceba que na anotação @Converter foi passado o atributo
autoApplay=true. Isso faz com que o conversor seja aplicado automaticamente em
todos os casos. Quando esse atributo é falso, você fica responsável por informar
ao JPA sempre que desejar usá-lo, anotando a propriedade com @Convert e
passando a classe do conversor como segue:
@Column
@Convert(Converter = LocalDateConverter.class)
private LocalDate dataPrevisaoEntrega;
Pronto, podemos trabalhar com as novas classes do Java 8 de
forma simples e prática. Vou compartilhar um site muito bom para quem quer se
aprofundar no JPA e no qual me baseei para este artigo:
Nenhum comentário:
Postar um comentário