0

この質問が何度も寄せられていることは知っていますが、解決策はどれもうまくいきません。

だから私は親クラスを持っています:

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 を取得しています。

ここで機能する適切なソリューションを提供してください。

4

1 に答える 1