我有一個 Java User 類,一個用戶可以有朋友(List<User>)。默認情況下,Hibernate 創建兩個表:USER 和 USER_FRIENDS(USER_ID,FRIENDS_ID)
問題是當我在我的代碼中更改朋友并且我保存(用戶)時,彈簧添加新朋友但不要在資料庫中洗掉從陣列串列中洗掉的朋友。
@Entitypublic class User implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String pseudo;
private String password;
private String email;
private Gender gender;
@Lob
private byte[] avatar;
private String description;
private Date birthdate;
@ManyToMany(cascade = CascadeType.ALL)
private List<Game> favoriteGames = new ArrayList<>();
@OneToMany( cascade = CascadeType.ALL)
private List<User> friends = new ArrayList<>();
我試過@ManyToMany,@OneToMany,cascade = CascadeType.ALL
uj5u.com熱心網友回復:
基本上,首先我建議您特別注意物體中的 equals 和 hashCode 實作。你沒有向我們展示,但它應該是這樣的User.java:
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof User)) {
return false;
}
User other = (User) o;
return id != null && id.equals(other.getId());
}
@Override
public int hashCode() {
return getClass().hashCode();
}
這些非常重要,尤其是在處理集合中的物體時。
其次,用戶和他的朋友(其他用戶)之間的連接應該建模為多對多,因為:
- 每個用戶都可以成為許多其他用戶的朋友
- 每個用戶都可以有任意數量的朋友,也就是說很多朋友
我會這樣建模這種連接:
@ManyToMany
@JoinTable(name = "user_friends", joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "friend_user_id"))
private Set<User> friends = new HashSet<>();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454183.html
