【发布时间】:2020-11-14 00:09:24
【问题描述】:
我知道这个问题已被问过很多次,但没有一个解决方案适合我。
所以我有一个父类:
class User{
@Id
@NotNull
@Column(name = "`UserId`", nullable = false)
private Long userId;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "`UserId`")
private Set<Phone> phoneList;
}
还有一个子类:
class Phone {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "`UserId`")
private User user;
}
现在,当我收到包含新手机列表的用户类更新时,我想删除所有旧手机并添加新手机。请注意,这所有操作都发生在同一个 @Transactional 中。
我尝试过的解决方案:
user.getPhoneList().clear()
user.getPhoneList().addAll(新手机列表)
当我尝试上述逻辑时,Hibernate 正在尝试将旧手机的 userId 设置为 null。在这个位置,我得到 DataIntegrityViolation,因为 Phone 表中的 userId 是非空列。
请提供任何可以在此处使用的适当解决方案。
【问题讨论】:
标签: java hibernate mapping orphan-removal