2014-04-30 2 views
0

je tente de créer une relation de ManyToOne sur clé composite, mais quand j'insérer mon haricot PRES2 j'ai eu cette erreur:Play2/JPA/Ebean OneToMany Mapping, en utilisant un PrimaryKey composite

[error] Caused by: org.h2.jdbc.JdbcSQLException: Duplicate column name "CODE1"; SQL statement: 
[error] insert into Pres2 (code1, code2, code3, champ1, code1) values (?,?,?,?,?) [42121-172] 

Mon projet est Jouer 2.2.2.

Pourriez-vous m'aider à résoudre mon problème?

Mon code Première Id classe pour le haricot PRES1:

@Embeddable 
public class ClePres1 implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Column(name = "code1") 
    private String code1; 

    @Override 
    public int hashCode() { 
    ... 
    } 
    @Override 
    public boolean equals(Object obj) { 
    ... 
    } 

Mon haricot Code PRES1:

@Entity 
@Table(Name = "Pres1") 
public class Pres1 extends Model { 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    ClePres1 cle; 

    @OneToMany(mappedBy = "pres1") 
    private List<Pres2> listPres2; 

    ... 

Ma 2ème Id classe pour le haricot Code PRES2:

@Embeddable 
public class ClePres2 implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Column(name = "code1") 
    public String code1; 

    @Column(name = "code2") 
    public String code2; 

    @Column(name = "code3") 
    public String code3; 

    @Override 
    public int hashCode() { 
    ... 
    } 

    @Override 
    public boolean equals(Object obj) { 
    ... 
    } 

Mon PRES2 haricot:

@Entity 
@Table(name = "Pres2") 
public class Pres2 extends Model { 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    ClePres2 cle; 

    @Column(name = "champ1") 
    private String champ1; 

    @ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name = "code1",referencedColumnName="code1") 
    }) 
    private Pres1 pres1; 
+0

Veuillez publier l'entité Pres3, il semble que vous ayez une colonne code1 dans embeddable et dans entité. –

+0

désolé, c'est juste une mauvaise copie/passé j'ai édité ma question. est toujours Pres1 et Pres2 – flagadajones

Répondre

0

Vous avez la colonne code1 configurée dans la classe ClePres2 embeddable ainsi que dans la classe Pres2 pour configurer la relation @ManyToOne. Ce problème sera corrigé si vous supprimez code1 de ClePres2, mais si vous souhaitez avoir code1 dans l'ID incorporable pour Pres2, configurez la relation @ManyToOne comme ci-dessous pour éviter d'insérer deux fois la colonne code1.

@ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name = "code1",referencedColumnName="code1",insertable = false, updatable = false) 
    }) 
    private Pres1 pres1; 
Questions connexes