1
我對Hibernate和數據庫編程一般都很老實,但是我很新穎...... 我試圖將一些類似圖形的結構保存到數據庫中。在Hibernate中將多個集合映射到一個實體中
假設我有Java類是這樣的:
public class User {
@OneToMany(cascade=CascadeType.ALL)
private Collection<User> followers = new ArrayList<>();
@OneToMany(cascade=CascadeType.ALL)
private Collection<User> friends = new ArrayList<>();
@Id
private String name;
.....
}
問題是我想使用Hibernate將其保存到數據庫PostgeSQL。不過,我發現它很平凡。例如一個問題是: 假設我做的:
User user1 = new User("user1");
User user2 = new User("user2");
user1.getFollowers().add(user2);
user1.getFriends().add(user2);
現在,如果我不user1的對象合併會有問題與關鍵唯一性約束。我不知道是否這是問題,因爲我錯誤地配置了Hibernate註釋來保存我的結構,或者完全錯誤的方法來使用Hibernate以這種方式表示圖形?任何幫助非常感謝。
當我更改ID列並刪除user_user表中的某些列的非空約束時,它似乎無任何例外地保存它。但是,仍然存在這樣的問題,即名稱應該是唯一的,並且使用不同會話中的合併重新保存同一用戶(使用相同名稱),結果會創建重複行(具有相同名稱)。我應該如何處理? – user2183977 2013-05-09 20:24:24
您只需要名稱上的唯一鍵約束。您不想將其用作主鍵,否則您無法更改給定實體的名稱。 @Table(name =「users」,uniqueConstraints = { \t \t @UniqueConstraint(columnNames = {「name」})}) – Doradus 2017-09-26 11:19:01