2010-11-11 5 views
2

J'utilise JPA 2.0 et j'utilise un schéma généré.Ajouter une ligne pour joindre une table en utilisant JPA

Voici ma carte:

@Entity 
@Table(name = "CBV_USER") 
public class CbvUser implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @Basic(optional = false) 
    @Column(name = "Login") 
    private String login; 

    @Basic(optional = false) 
    @Column(name = "Password") 
    private String password; 

    @Basic(optional = false) 
    @Column(name = "Email") 
    private String email; 

    @Basic(optional = false) 
    @Column(name = "FirstName") 
    private String firstName; 

    @Basic(optional = false) 
    @Column(name = "LastName") 
    private String lastName; 

    @Basic(optional = false) 
    @Column(name = "Id") 
    private String id; 

    @Column(name = "Score") 
    private BigDecimal score; 

    @JoinTable(name = "FRIENDSHIP", joinColumns = { 
     @JoinColumn(name = "Login0", referencedColumnName = "Login")}, inverseJoinColumns = { 
     @JoinColumn(name = "Login1", referencedColumnName = "Login")}) 
    @ManyToMany 
    private List<CbvUser> cbvUserList2; 

    @ManyToMany(mappedBy = "cbvUserList2") 
    private List<CbvUser> cbvUserList3; 

    public CbvUser() { 
    } 

    public CbvUser(String login) { 
     this.login = login; 
    } 

    public CbvUser(String login, String password, String email, String firstName, String lastName, String id) { 
     this.login = login; 
     this.password = password; 
     this.email = email; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.id = id; 
    } 

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public BigDecimal getScore() { 
     return score; 
    } 

    public void setScore(BigDecimal score) { 
     this.score = score; 
    } 

    public List<CbvUser> getCbvUserList2() { 
     return cbvUserList2; 
    } 

    public void setCbvUserList2(List<CbvUser> cbvUserList2) { 
     this.cbvUserList2 = cbvUserList2; 
    } 

    public List<CbvUser> getCbvUserList3() { 
     return cbvUserList3; 
    } 

    public void setCbvUserList3(List<CbvUser> cbvUserList3) { 
     this.cbvUserList3 = cbvUserList3; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (login != null ? login.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof CbvUser)) { 
      return false; 
     } 
     CbvUser other = (CbvUser) object; 
     if ((this.login == null && other.login != null) || (this.login != null && !this.login.equals(other.login))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "models.CbvUser[login=" + login + "]"; 
    } 

} 

Mon problème est que je ne peux pas comprendre comment ajouter une nouvelle ligne dans la table de jointure AMITIÉ par un CbvUser spécifique ou par un EntityManager.

Je serai vraiment reconnaissant pour toute aide.

Répondre

2

Quelque chose comme cela devrait fonctionner:

CbvUser user1 = new CbvUser(); 
... 
CbvUser user2 = new CbvUser(); 
... 

// declare user2 as a friend of user1 
List<CbvUser> cbvUserList2 = new ArrayList<CbvUser>(); 
cbvUserList2.add(user2); 
user1.setCbvUserList2(cbvUserList2); 

// declare user1 as a friend of user2 
List<CbvUser> cbvUserList3 = new ArrayList<CbvUser>(); 
cbvUserList3.add(user1); 
user2.setCbvUserList3(cbvUserList3); 

em.persist(user1); 
em.persist(user2); 
em.flush(); 

La relation d'amitié est un (auto-référencement) association bidirectionnelle, vous devez définir les deux côtés du lien correctement (de user1 à utilisateur2 et de utilisateur2 à user1).

+0

Oui, merci. Hier j'ai trouvé une solution similaire sur cette page qui fonctionnait parfaitement: http://www.winstonprakash.com/articles/netbeans/JPA_Add_Update_Delete.html – mgvaldes

0

Fournir un ajout/suppression public qui maintient l'intégrité référentielle pourrait être encore plus élégant ici.

Questions connexes