JPA: Entity compartilhada

4 respostas
A

Ola

Nao estou conseguindo resolver um problema…parece basico, mas encontrar a solucao esta me esgotando:

Vamos supor que eu tenha uma classe Cliente.
No sistema esse cliente vai ter 3 tipos de enderecos, endereco principal (um para um), endereco de entrega (um para muitos) e endereco de cobranca (um para muitos)

Acontece que se eu criar a classe Endereco, e fizer mapeamento OneToMany no cliente para cada atributo, o JPA vai criar uma tabela com os campos PK, cliente_entrega, cliente_cobranca).

Ao tentar persistir isso, o JPA vai fazer um insert (X,1, null) , e isso causa um erro (na tabela criada nenhum campo pode ser null, o JPA q me disse isso :P).

Como poderia resolver isso?

No aguardo

PS: Uma solucao e criar subclasses de endereco, e usar InheritanceType.JOIN , mas isso causaria mais consultas ao banco.
Utilizar InheritanceType.SINGLE_TABLE leva ao mesmo erro de cima.

4 Respostas

danieldestro

Usa uma tabela ternária.

A

Um, JPA, tabela ternaria… nao vejo sentido na resposta

danieldestro

Eu disse TABELA ternária e não CLASSE ternária.

Além do que, ele excluiu uma das opções:

A

Respondendo a mim mesmo:
O problema é a definicao de nomes automatica para tabelas e colunas e etc.
Para evitar isso, basta usar a Annotation @JoinTable, para poder usar o atributo name:

@Entity
public class Cliente implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Long id;
    
    @OneToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "endereco_entrega")
    private List<Endereco> enderecoEntrega;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "endereco_cobranca")
    private List<Endereco> enderecoEntrega;

 }
Criado 13 de setembro de 2007
Ultima resposta 17 de set. de 2007
Respostas 4
Participantes 2