У меня есть такие объекты, как показано ниже:
@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 (List userMembers) в транзакции, он сначала пытается вставить новых членов списка, а затем удаляет старые данные.
Проблема в том, что моя таблица имеет уникальное ограничение, старые и новые данные конфликтуют друг с другом.
он будет работать нормально, если сначала попытается удалить старые, а затем вставить новые. Есть ли выход из этой ситуации?
@ K.Nicholas почему?
Старые данные не будут работать с новой схемой = вам необходимо «перенести базу данных». Вам нужно сделать такие вещи, как сначала удалить несовместимые строки, прежде чем применять индекс или копировать в новую таблицу, или что-то еще, что сработает.
@ K.Nicholas Нет старой схемы и таблицы, также все данные совместимы, я просто хочу попробовать массовое обновление. Удалите существующих userMembers для этого пользователя и добавьте новости. Но удаление сирот привело к тому, что сначала добавлялись новые, а затем удалялись старые. Но он должен сначала запустить удаление, а затем добавить для меня новые.
Итак, что означает «удалить старые данные»? Какие старые данные? Нет старой схемы, тогда нет старых данных.
Выложите пожалуйста актуальный код setRoles. В настоящее время он не компилируется, потому что userMembers объявлен как параметр и как локальная переменная. Также он копирует roleMembers на себя, что может быть ошибкой в вашей публикации или реальной проблемой, с которой вы столкнулись.




перенести вашу базу данных.