Introdução
A JPA possui um recurso para criar conversores JPA, sendo um facilitador para converter qualquer tipo de objeto, ENUM. O JARCH possui alguns conversores que facilita a gravação de alguns tipos.
Exemplos
Nesse post vou mostrar como usar os conversores JPA. O JARCH possui alguns conversores JPA para a nova API de datas, boolean, etc. Existe duas formas de utilizar esses conversores, colocando o conversor através da anotação @Convert ou registrando os conversores no persistence.xml.
Segue um exemplo abaixo usando a declaração via anotação:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | package br.com.arch.arquitetura.crud.tudo; import br.com.jarch.crud.entity.CrudMultiTenantEntity; import br.com.jarch.jpa.converter.LocalDateJpaConverter; import br.com.jarc.jpa.converter.LocalDateTimeJpaConverter; import br.com.jarch.jpa.converter.LocalTimeJpaConverter; import br.com.jarch.jpa.converter.YearMonthJpaConverter; import br.com.jarch.jpa.converter.br.BooleanSNJpaConverter; import org.hibernate.envers.Audited; import javax.persistence.Column; import javax.persistence.Convert; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; @Audited @Table(name = "tb_tudo") @Entity(name = "tudo") @SequenceGenerator(name = "TudoIdSequence", sequenceName = "sq_idtudo", allocationSize = 1) public class TudoEntity extends CrudMultiTenantEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "TudoIdSequence") @Column(name = "id_tudo") private Long id; @Column(name = "dt_tudo") @Convert(converter = LocalDateJpaConverter.class) private LocalDate data; @Column(name = "dh_tudo") @Convert(converter = LocalDateTimeJpaConverter.class) private LocalDateTime dataHora; @Column(name = "hr_tudo") @Convert(converter = LocalTimeJpaConverter.class) private LocalTime hora; @Column(name = "am_competencia", length = 7) @Convert(converter = YearMonthJpaConverter.class) private YearMonth competencia; @Column(name = "sn_tudo") @Convert(converter = BooleanSNJpaConverter.class) private Boolean simNao; @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } public LocalDate getData() { return data; } public void setData(LocalDate data) { this.data = data; } public LocalDateTime getDataHora() { return dataHora; } public void setDataHora(LocalDateTime dataHora) { this.dataHora = dataHora; } public LocalTime getHora() { return hora; } public void setHora(LocalTime hora) { this.hora = hora; } public YearMonth getCompetencia() { return competencia; } public void setCompetencia(YearMonth competencia) { this.competencia = competencia; } public Boolean getSimNao() { return simNao; } public void setSimNao(Boolean simNao) { this.simNao = simNao; } } |
Analisando o código anterior notamos a utilização da anotação @Convert usando o conversor do JARCH.
A outra maneira de utilização seria registrar os conversores no persistence.xml. Dessa maneira todos os campos de uma Entity que obtiverem os conversores registrados já terá o conversor implicitamente.
Segue um exemplo abaixo declarando os conversores no persistence.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="arquiteturaweb-pu" transaction-type="JTA"> <jta-data-source>java:/ds/arquitetura/postgresql</jta-data-source> <class>com.arch.jpa.converter.LocalDateJpaConverter</class> <class>com.arch.jpa.converter.LocalDateTimeJpaConverter</class> <class>com.arch.jpa.converter.LocalTimeJpaConverter</class> <class>com.arch.jpa.converter.YearMonthJpaConverter</class> <class>com.arch.jpa.converter.br.BooleanSNJpaConverter</class> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <!-- <exclude-unlisted-classes>false</exclude-unlisted-classes> --> <properties> |
No código anterior as linhas com as tags
Segue o persistence.xml abaixo com a declaração de todos os conversores sem especificar um a um:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="arquiteturaweb-pu" transaction-type="JTA"> <jta-data-source>java:/ds/arquitetura/postgresql</jta-data-source> <jar-file>lib/jarch-framework-18.7.1.jar</jar-file> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <!-- <exclude-unlisted-classes>false</exclude-unlisted-classes> --> <properties> |
Conclusão
Com esses conversores disponíveis o uso da nova API de datas ficou mais fácil, tornando transparente a migração do antigo Date.
Até mais,
Nenhum comentário:
Postar um comentário