Skip to content
felipe-castanon edited this page Oct 2, 2014 · 14 revisions

Table of Contents

Repository

Com o objetivo de facilitar e reutilizar código de persistência para as entidades, disponibilizou-se três suportes possíveis:

Query;
Support;
Validation;

Support

Query

A classe JPQL serve como suporte para a construção de queries utilizando a Java Persistence Query Language. Para isso, o construtor dessa classe deve receber o entityManager para que, ao final da configuração, ela possa executar a query.

A configuração da query será feita orientada a objeto e de maneira simular a uma Criteria, mas que construí uma JPQL com trechos de código para especificar o que será incluído no:

select;
from;
where;
group by;
order by;
range de resultado.

Ao final da configuração, os resultados podem ser obtidos em lista ou por um resultado único.

/**
 * Retorna uma lista de entidades que atendem aos critérios da busca.
 * Já faz o <code>cast</code> para a classe <code>resultType</code> passada.
 * 
 * @param resultType
 * @return
 */
@SuppressWarnings("unchecked")
public <T> List<T> getResultList(Class<T> resultType);

/**
 * Retorna uma lista de entidades que atendem aos critérios da busca.
 * 
 * @return
 */
public List<?> getResultList();

/**
 * Retorna uma única entidade que atenda aos critérios da busca.
 * Já faz o <code>cast</code> para a classe <code>resultType</code> passada.
 * 
 * @param resultType
 * @return
 */
@SuppressWarnings("unchecked")
public <T> T getSingleResult(Class<T> resultType);

/**
 * Retorna uma única entidade que atenda aos critérios da busca.
 * 
 * @return
 */
public Object getSingleResult();

/**
 * Retorna uma única entidade que atenda aos critérios da busca.
 * Trata o caso de não haver resultado, retornando <code>null</code>.
 * Já faz o <code>cast</code> para a classe <code>resultType</code> passada.
 * 
 * @param resultType
 * @return
 */
@SuppressWarnings("unchecked")
public <T> T getAnyResult(Class<T> resultType);

/**
 * Retorna uma única entidade que atenda aos critérios da busca.
 * Trata o caso de não haver resultado, retornando <code>null</code>.
 * 
 * @return
 */
public Object getAnyResult();

Validation

Validações são ações necessárias em qualquer sistema que trabalhe sobre um domínio específico de dados. Elas variam de acordo com os tipos de campos utilizados e podem ser específicas a certas regiões.

A API em javax.validation fornece uma série de anotações que permite que os desenvolvedores restringam o conjunto aceitável de dados em um determinado campo. Mas essas validações seguem padrões internacionais, não apresentando soluções para CPF e CNPJ, por exemplo.

O Suri-CDI possui facilidades para trabalhar com esses tipos de dados. O pacote br.com.surittec.suricdi.core.validation contem anotações para que o Java Bean Validation seja capaz de interpretar e validar um determinado campo.

A arquitetura especializa esse comportamento e disponibiliza as validações para os campos de CPF, CNPJ e E-mail da seguinte maneira:

@Cpf
@Column(name = "cpf", length = 11, unique = true, nullable = false)
private String cpf;

@Cnpj
@Column(name = "cnpj", length = 14, unique = true, nullable = false)
private String cnpj;

@Email
@Column(name = "email", length = 100, unique = true, nullable = false)
private String email;

Clone this wiki locally