Mapeando Entidades

CAMPOS COM COLEÇÕES

  1. Utilizar Set Evita MultipleBagFetchException e algumas abstrações do framework dependem da implementação do Set.

  2. Inicializar as coleções na declaração O framework utliza "Reflexão" para recuperar os campos, logo precisamos das coleções inicializadas para saber qual classe esta associada à coleção.

  3. Anotações com parâmetros obrigatórios

    1. FetchType Utilizar LAZY sempre que possível para buscar informações sob demanda e evitar problemas de performance.

    2. Cascade Utilizar ALL, MERGE ou PERSIST. O framework só inicializa as listas sob demanda, de forma automatica, quando estão anotadas com um desses tipos de cascade.

    3. MappedBy Necessário especificar o nome do campo na classe filho que referencia o parente (anotado no filho como @ManyTo*).

Para relacionamentos de muitos-para-muitos é recomendado mapear uma entidade para a tabela associativa e mapear um relacionamento de @OneToMany nas entidades das tabelas relacionadas para a entidade da tabela associativa (ao invés de mapear com @ManyToMany).

Exemplos:

ParenteVO.java
@Entity
@Table(name = "TB_PARENTE")
public class ParenteVO extends AppBaseVO {
	
	private Set<FilhoVO> filhos = new LinkedHashSet<>(); // (1) e (2) set inicializado

	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "nomeAtributoParente", orphanRemoval = true) // (3) anotação parametrizada
	public Set<FilhoVO> getFilhos() {
		return filhos;
	}

	public void setFilhos(Set<FilhoVO> filhos) {
		this.filhos = filhos;
	}
	
	// demais campos e métodos ocultados para brevidade
}

CAMPOS COM ENUMS

  1. Utilizar EnumType.STRING A Prodemge padroniza que os campos do tipo Enum sejam mapeados como String. Caráter obrigatório.

Exemplo:

CAMPOS COM DATAS

  1. Utilizar Date (java.util.Date) Algumas abstrações do framework dependem de que as datas sejam mapeadas com Date.

É recomendado que se utilize temporal TIMESTAMP. No entanto, não existe uma regra. O importante é manter padronizado e consistente com o que foi escolhido.

Exemplo:

CAMPOS COM BOOLEANOS

  1. Utilizar o prefixo "GET" Algumas abstrações do framework dependem que os campos mapeados tenham sempre o prefixo "get". Caso seja necessário utilizar o prefixo "is" deve-se criar um campo transiente.

Exemplo:

Last updated