この質問が何度も寄せられていることは知っていますが、解決策はどれもうまくいきません。
だから私は親クラスを持っています:
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;
}
新しい電話リストを持つ User クラスの更新を受け取ったので、古い電話をすべて削除して新しい電話を追加したいと思います。このすべての操作が同じ @Transactional で行われていることに注意してください。
私が試した解決策:
user.getPhoneList().clear()
user.getPhoneList().addAll(新しい電話リスト)
上記のロジックを試すと、Hibernate は userId を null として古い電話を設定しようとしています。この位置で、Phone テーブルの userId が null 列ではないため、DataIntegrityViolation を取得しています。
ここで機能する適切なソリューションを提供してください。