@MapsId和具有与会话关联的相同标识符值的两个对象

时间:2015-03-04 16:10:11

标签: mysql sql hibernate jpa

我的实体@OneToOneDirigeantsEntreprise之间的Fournisseur关系是这样的:

@Entity
@Table(name = "dirigeants_entreprise", catalog = "ao")
public class DirigeantsEntreprise implements java.io.Serializable {

    private int idEntreprise;
    private Fournisseur fournisseur;
    private String nom;
    private String poste;
    ....

    @Id
    @Column(name = "id_entreprise", unique = true, nullable = false)
    public int getIdEntreprise() {
        return this.idEntreprise;
    }
    ...

    @MapsId
    @OneToOne
    @JoinColumn(name = "id_entreprise")
    public Fournisseur getFournisseur() {
        return this.fournisseur;
    }

但是当我尝试保存对象时:

....
fournisseur_respository.save(fournisseur);
dirigeants_repo.save( new DirigeantsEntreprise( fournisseur,...,... ));

我遇到了这个例外:

javax.persistence.EntityExistsException: 
A different object with the same identifier value was already associated   with 
the session : [persistence.DirigeantsEntreprise#35]

PS:35是我的fournisseur

的ID

我认为问题出在地图上,我有DirigeantsEntrepriseFournisseur两个具有相同标识符35的对象。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我们必须按saveAndFlush()刷新会话,因此它只是一个具有相同标识符的对象。

....
fournisseur_respository.saveAndFlush(fournisseur);
dirigeants_repo.save( new DirigeantsEntreprise( fournisseur,...,... ));