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
}Mapeamento Tabela Associativa
@Entity
@Table(name = "TB_AUTOR_LIVRO")
public class AutorLivroVO extends AppBaseVO {
private AutorVO autor;
private LivroVO livro;
@ManyToOne
@JoinColumn(name = "ID_AUTOR")
public AutorVO getAutor() {
return autor;
}
@ManyToOne
@JoinColumn(name = "ID_LIVRO")
public LivroVO getLivro() {
return livro;
}
// demais campos e métodos ocultados para brevidade
}Mapeamento Tabelas Relacionadas
CAMPOS COM ENUMS
Utilizar EnumType.STRING A Prodemge padroniza que os campos do tipo Enum sejam mapeados como String. Caráter obrigatório.
Exemplo:
CAMPOS COM DATAS
Utilizar Date (java.util.Date) Algumas abstrações do framework dependem de que as datas sejam mapeadas com Date.
Exemplo:
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:
Last updated