JPA + Hibernate OneToMany com Composite Id

4 respostas
shinoob

o que eu quero fazer uma relacao OndeToMany , onde o ID da tabela pai faz parte do primaryKey da tabela filha

@MappedSuperclass
public class Participante extends DefaultEntity<Integer> {

    @Id
    @Column(name = "id_part")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sq_part_gen")
    @SequenceGenerator(name = "sq_part_gen", sequenceName = "sq_part", allocationSize = 1)
    protected Integer idParticipante;

@Entity
@Table(name = "tb_emp")
public class Empresa extends Participante {

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="id_emp")
    private Collection<Departamento> departamentos = new HashSet<Departamento>();

@Entity
@Table(name = "tb_dep")
public class Departamento implements Serializable {
    
    @Id
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="id_emp")
    private Empresa empresa;
    
    @Id
    @Column(name="id_dep")
    private Integer idDepartamento;
    
    @Column(name="descr")
    private String descr;

mas eu tenho que inserir as detalhes, sem inserir a mestre nas detalhes … ex

EmpresaBC bc = new EmpresaBC();
        
        Empresa e = new Empresa();
        e.setNome("Empresa de teste");
        
        Collection<Departamento> depList = new ArrayList<Departamento>();
        
        Departamento dep = new Departamento();
        dep.setIdDepartamento(1);
        dep.setDescr("Departamento teste");
        
        
        depList.add(dep);
        
        e.setDepartamentos(depList);
        
        bc.insert(e);

como eu faço isso?
eu ja tentei td conté anotação mas sempre cai o id_emp = NULL
e qdo nao da erro, nao salva os registros filhos

ja tentei o mappedBy, EmbbedId e outras annotations

4 Respostas

pmlm
Hebert_Coelho

Relacionamento funciona a base de refência… A referência boba de java mesmo.

Ou seja

pessoa.setCachorro(cachorro);
cachorro.setPessoa(pessoa);

Repare que eu fiz com que os dois objetos se olhassem.

shinoob

é exatamente o q eu nao keria fazer …
nao tem como fazer o hibernate fazer isso automatico?

Hebert_Coelho

Eu sei que o JPA puro não. O JPA respeita o java a ponto de que você tenha que passar referências.

Imagine que você não queria q pessoa.setCachorro(cachorro), mas queira apenas que cachorro.setPessoa(pessoa) tenha valor.

Sei lá. sei que no JPA até hoje isso não existe, ele respeita o funcionamento do java quando se fala de referências.

Criado 4 de novembro de 2011
Ultima resposta 6 de nov. de 2011
Respostas 4
Participantes 3