Mapeando Entidades
CAMPOS COM COLEÇÕES
Utilizar Set Evita MultipleBagFetchException e algumas abstrações do framework dependem da implementação do Set.
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.
Anotações com parâmetros obrigatórios
FetchType Utilizar LAZY sempre que possível para buscar informações sob demanda e evitar problemas de performance.
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.
MappedBy Necessário especificar o nome do campo na classe filho que referencia o parente (anotado no filho como @ManyTo*).
Exemplos:
@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
Utilizar EnumType.STRING A Prodemge padroniza que os campos do tipo Enum sejam mapeados como String. Caráter obrigatório.
Exemplo:
@Enumerated(EnumType.STRING)
@Column(name = "CD_SITUACAO")
public SituacaoEscalaEnum getSituacao() {
return situacao;
}
CAMPOS COM DATAS
Utilizar Date (java.util.Date) Algumas abstrações do framework dependem de que as datas sejam mapeadas com Date.
Exemplo:
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DT_ATENDIMENTO")
public Date getDataAtendimento() {
return dataAtendimento;
}
CAMPOS COM BOOLEANOS
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:
@Column(name = "IS_ENCAIXE")
public Boolean getEncaixe() {
return encaixe;
}
public void setEncaixe(Boolean encaixe) {
this.encaixe = encaixe;
}
@Transient
public Boolean isEncaixe() {
return Boolean.TRUE.equals(getEncaixe());
}
Last updated