Introdução
Muitas vezes precisamos garantir que um determinado atributo de nossa entidade seja exclusivo, como por exemplo CPF, Código, etc. Para garantir isso precisamos fazer uma busca no momento da gravação, sendo um pouco complicado uma vez que a busca pode retornar a própria entidade em questão. O JARCH possui uma forma prática de resolver essa questão.
@JArchValidExclusive
Observe a entidade Banco como exemplo abaixo:
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 | @Table(name = "tb_banco") @Entity(name = "banco") public class BancoEntity extends CrudMultiTenantEntity { @SequenceGenerator(name = "BancoIdSequence", sequenceName = "sq_idbanco", allocationSize = 1) @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BancoIdSequence") @Column(name = "id_banco") private Long id; @Column(name = "cd_banco") @JArchValidRequired("label.codigo") @JArchValidExclusive @Size(max = 3, message = "{message.maxSizeExceeded}") private String codigo; @Column(name = "nm_banco") @JArchValidRequired("label.nome") @Size(max = 50, message = "{message.maxSizeExceeded}") private String nome; public BancoEntity() { } public BancoEntity(String codigo, String nome) { this.codigo = codigo; this.nome = nome; } @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } public String getCodigo() { return codigo; } public void setCodigo(String codigo) { this.codigo = codigo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } |
Na linha 13 do código acima existe a anotação @ArchValidExclusive, isso garantirá que quando for feito uma gravação na entidade de Banco o framework vai garantir que somente existirá um registro com aquele código.
Veja os prints abaixo confirmando essa informação:
Nesse print acima notamos que já existe alguns bancos cadastrados, agora veja o que acontece ao tentar incluir novamente o banco com código 237 novamente:
A anotação @ArchValidExclusive possui alguns atributos:
caseSensitive: O conteudo avaliado será case-sensitive
message: A messagem de erro que será mostrado
label: A descrição do atributo para ser informado na mensagem de erro
Conclusão
Com essa simples anotação economizamos varias linhas de programação, se esse trabalho fosse feito a mão teríamos que prever todas as ações de CRUD e implementarmos a pesquisa manualmente. No próximo post veremos uma outra anotação para garantir exclusividade em mais de um atributo.
Até mais,
Nenhum comentário:
Postar um comentário