我正在使用JPA 2.0,而且我正在使用生成的架构。
这是我的映射:
@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 + "]";
}
}
我的问题是我无法弄清楚如何通过特定的CbvUser或EntityManager在Join Table FRIENDSHIP中添加新行。
我真的很感激任何帮助。
答案 0 :(得分:2)
这样的事情应该有效:
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();
友谊关系是(自引用)双向关联,因此您必须正确设置链接的两端(从user1到user2以及从user2到user1)。
答案 1 :(得分:0)
提供维护参照完整性的公共添加/删除可能会更加优雅。