JPA OneToMany : List vs Set
我有两个实体:和 .它们之间的关系如下所示。UserAccount
Notification
public class UserAccount {
@Id
@Column(name = "USER_NAME")
private String emailId;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "USERS_NOTIFICATIONS", joinColumns = { @JoinColumn(name = "USER_NAME") }, inverseJoinColumns = { @JoinColumn(name = "NOTIFICATION_ID") })
private List<Notification> notifications;
//setters, getter, equals and hashcode
}
和 都会被覆盖(由 IDE 使用业务键/主键生成)。equals()
hashcode()
给定一个 ,当我添加第一个时,它会产生一个 INSERT 语句。但是在进一步添加相同的 ,它首先删除,然后插入:UserAccount
Notification
UserAccount
Hibernate: delete from USERS_NOTIFICATIONS where USER_NAME=?
Hibernate: insert into USERS_NOTIFICATIONS (USER_NAME, NOTIFICATION_ID) values (?, ?)
Hibernate: insert into USERS_NOTIFICATIONS (USER_NAME, NOTIFICATION_ID) values (?, ?)
Hibernate: insert into USERS_NOTIFICATIONS (USER_NAME, NOTIFICATION_ID) values (?, ?)
//as many inserts as the notifications the user has
每个 .如果我用 替换 ,则会出现正常的 INSERT。在阅读本文档和博客后,我找到了原因。UserAccount
List
Set
来自文档的观察结果
- 在单向关联中,是首选。
@OneToMany
Set
应该清楚的是,索引并允许在添加,删除和更新元素方面进行最有效的操作。
Collections
Sets
- 在双向关系(管理),并且是有效的。
@OneToMany
@ManyToOne
List
Bags
Bags
并且是最有效的反向。Lists
Collections
话虽如此,这更可取:
A over a in a 单向映射?
Set
List
@OneToMany
或者,我是否必须通过添加双向关系来调整我的域模型以使用 ,尤其是在存在重复项时?
List