de dados.Por padrao se fizermos um mapeamento com a API de data do java 8, o dado sera gravado serializado.Para esse post fiz um projeto de exemplo com algumas entidades e varios mapeamentos para os tipos novos de data. Para ajudar fiz uma classe util que lista todas as tabelas e campos da base.Desta maneira fica facil ver como cada configuracao afeta como a base e gerada via JPA.Uma das entidades e Aluno e rodando o teste sem criar o AttributeConverter para LocalDate, podemos perceber que o campo foi gerado como binario.@Entitypublic class Aluno { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; @Column(length=200, nullable=false) private String nome; @Column(nullable=false) private LocalDate dataNascimento;Saida teste:ALUNO COLUMN_NAME=ID, DATA_TYPE=4, TYPE_NAME=INTEGER, COLUMN_SIZE=10 COLUMN_NAME=DATANASCIMENTO, DATA_TYPE=-3, TYPE_NAME=VARBINARY, COLUMN_SIZE=255Para criar um atribute converter basta implementar a interface javax.persistence.AttributeConverter e realizar uma configuracao via a anotacao javax.persistence.Converter:import java.sql.Date;import java.time.LocalDate;import javax.persistence.AttributeConverter;import javax.persistence.Converter;@Converter(autoApply=true)public class LocalDateAtributeConverter implements AttributeConverter<LocalDate, Date> { public Date convertToDatabaseColumn(LocalDate attribute) { return Date.valueOf(attribute); } public LocalDate convertToEntityAttribute(Date dbData) { return dbData.toLocalDate(); }}O autoApply=true serve para indicar que por padrao a implementacao JPA deve realizar essa conversao.Caso seja colocado false, e preciso usar a anotacao Convert no mapeamento do campo: @Convert(converter=LocalDateAtributeConverter.class) private LocalDate dataNascimento;A anotacao convert possui precedencia sobre o converter global, entao pode ser utilizado para sobrescrever alguma configuracao.Depois de feita uma das mudancas acima, a tabela e gerada corretamente:ALUNO COLUMN_NAME=ID, DATA_TYPE=4, TYPE_NAME=INTEGER, COLUMN_SIZE=10 COLUMN_NAME=DATANASCIMENTO, DATA_TYPE=91, TYPE_NAME=DATE, COLUMN_SIZE=8Para o mapeamento de Enums, por padrao (@Enumerated) podemos mapear pela ordem deles (comecando com 0) ou pelo nome. Ambos os casos podem ser uteis em determinadas situacoes, como no enum abaixo:public enum TipoPessoa { PF, PJ}Neste caso, nao temos problema em fazer o mapeamento por nome, pois fica claro que PF e PJ se referem a pessoa fisica e juridica.Em alguns casos nao podemos fazer isso, seja porque nao ficaria muito legivel ou seja porque estamos trabalhando com uma base legada que possui seus codigos.Vamos imaginar que para diferenciar entrada e saida, sao utilizados os codigos '001' e '002', neste caso nao teriamos como fazer o mapeamento utilizando a anotacao @Enumerated, mas fica bem simples utilizando o converter: //mapeamento @Column(length=3) private TipoPonto tipo;public enum TipoPonto { ENTRADA("001"), SAIDA("002"); private String codigo; private TipoPonto(String codigo) { this.codigo = codigo; } public String getCodigo() { return codigo; } public static TipoPonto getTipoPonto(String codigo) { TipoPonto[] values = values(); for (TipoPonto tipoPonto : values) { if (tipoPonto.getCodigo().equals(codigo)) { return tipoPonto; } } throw new IllegalArgumentException("TipoPonto nao encontrado"); }}@Converter(autoApply=true)public class TipoPontoAtributeConverter implements AttributeConverter<TipoPonto, String> { public String convertToDatabaseColumn(TipoPonto attribute) { return attribute.getCodigo(); } public TipoPonto convertToEntityAttribute(String dbData) { return TipoPonto.getTipoPonto(dbData); }}Eu fiz outros exemplos, mas todos seguem a mesma linha, entao fica mais interessante brincar com o projeto de teste que eu estou disponibilizando.O Projeto utiliza o Maven e configurei o Hibernate como provider JPA. Como SGBD utilizei o banco H2, trabalhando apenas em memoria.O download pode ser feito aqui. Em breve vou jogar esse fonte no github.