У меня есть объекты, подобные приведенным ниже:
@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = {“user_member_id", “address_id”})
})
Public class User(){
private Long id;
private String name;
private String surname;
@OneToMany(mappedBy = “user”, cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<UserMember> userMembers;
@OneToMany(mappedBy = “user”, cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<Address> addresses;
//… getters setters
public void setRoles(List<UserMembers> userMembers) {
this.userMembers.clear();
List<UserMembers> userMembers = userMembers.stream()
.map(operatorRole -> new OperatorRoleMember(this, operatorRole))
.collect(Collectors.toList());
this.roleMembers.addAll(roleMembers);
}
}
@Entity
Public class UserMember(){
private Long id;
private name;
@ManyToOne
private User user;
//getters and setters...
}
Когда я запускаю setRoles (список userMembers) в транзакции, он сначала пытается вставить новые элементы списка, а затем удалить старые данные.
Проблема в том, что у моей таблицы есть уникальные ограничения, старые данные и новые данные конфликтуют друг с другом.
это будет нормально работать, если сначала попытаться удалить старые, а затем вставить новые.Есть ли выход из этой ситуации?