JPA Primary Key composto por Foreign Key

Boa tarde,
Criei um mapeamento com uma chave primeira composta por dois campos que são chaves estrangeiras, uma dessas chaves composta é pela entity que estou inserindo e ainda não tenho o código. Segue as classes.
Classe principal que tem uma lista de um objeto que tem chave estrangeira.

@Entity
public class Classe1{
    @Id
    private Long id;
    @OneToMany(mappedBy="classe2",fetch=FetchType.EAGER ,orphanRemoval = true,cascade = CascadeType.ALL)
    private List<Classe2> classe2;
}

Classe que tem chave primaria estrangeira

@Entity
public class Classe2{
        @EmbeddedId
        private ChaveClasse2 id;
        @ManyToOne
	@JoinColumn(name="id", insertable=false, updatable=false)
	private Classe1 classe1;
}

Chave composta estrangeira

@Embeddable
public class ChaveClasse2{
      private Long id;
      private Long id2;
}

Inserindo da maneira a baixo, não é possível salvar pois não consegue ter a chave da Classe1 na hora de criar. Pois ele está mapeado com o JoinColumn. O que eu precisava é do ChaveClasse2 ter o registro após a inserção do Classe1.

Classe1 classe = new Classe1();
Classe2 classe2 = new Classe2();
classe2.setClasse1(classe);
classe.addClasse2(classe2);
em.merge(classe);

A solução encontrada foi alterando a classe Classe2 para ficar dessa maneira:

@Entity
public class Classe2{
        @EmbeddedId
        private ChaveClasse2 id;
        @MapsId("id")
        @ManyToOne
	@JoinColumn(name="id", insertable=false, updatable=false)
	private Classe1 classe1;
}

Adicionando @MapsId(“id”) , onde o paramêtro é o nome do atributo de dentro da ChaveClasse2.

Espero ter ajudado.
Até a próxima.

Postado terça-feira, agosto 18th, 2015 em Uncategorized.

Deixe uma resposta