Relacionamento ManyToOne não persiste.

13/05/2009

4

Srs.

Tenho aqui uma estrutura de relacionamento da seguinte forma.

A tabela abstrata Pessoa.

@Entity
@Table(name = "pessoa")
@Inheritance (strategy=InheritanceType.JOINED)
@DiscriminatorColumn (name="tipo",discriminatorType=DiscriminatorType.CHAR, length=1)
@DiscriminatorValue (value="M")

public abstract class Pessoa implements Serializable{}

@OneToOne(cascade = CascadeType.ALL, mappedBy = "pessoa")
private Matriz matriz;
    
@OneToOne(cascade = CascadeType.ALL, mappedBy = "pessoa")
private Filial filial;


A tabela Matriz extendendo Pessoa.

@Entity
@Table(name = "matriz")
@DiscriminatorValue (value="M")
public class Matriz extends Pessoa implements Serializable {}

@OneToOne
@JoinColumn(name = "codigo", referencedColumnName = "codigo")
private Pessoa pessoa;

@OneToMany(mappedBy = "matriz", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Collection<Filial> filial;


A tabela Filial extendendo Pessoa e relacionando-se com a Matriz.

@Entity
@Table(name = "filial")
@DiscriminatorValue (value="F")
public class Filial extends Pessoa implements Serializable {}

@OneToOne
@JoinColumn(name = "codigo", referencedColumnName = "codigo")


@ManyToOne
@JoinColumn(name = "cod_matriz", referencedColumnName = "codigo", nullable = false)
private Matriz matriz;


O relalcionamento de herança esta funcionando corretamente entre as três tabelas, acontece que o relacionamento entre a Filial e a Matriz, quando se tenta persistir a classe Filial, simplesmente o atributo cod_matriz sempre grava no banco como null, não há nenhum tipo de erro, todos os outros atributos da classe são persistidos sem nenhum problema.

Será que este tipo de relacionamento (Filial x Matriz) é permitido no Toplink JPA ?

Há alguma anotação específica para o relacionamento ManyToOne entre Filial e Matriz que seja necessária, levando-se em conta que as duas classes herdam de Pessoa &63

Abraços

Olavo Jr.
Responder

Posts

14/08/2009

Dyego.carmo

Para que o hibernate persista um relacionamento a FK nao pode ser NULL em nenhuma das duas pontas...

ex: Pessoa tem varios enderecos...

A classe pessoa tem um metodo addEndereco certo ?

Teria que ficar assim:

public void addEndereco(Endereco end) {

enderecos.add(end); <-- aqui voce adiciona na lista de endereços da classe pessoa
end.setPessoa(this); <-- Aqui voce fecha a referencia bilateral para a classe de endereco

}
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira