Jpa orphanRemoval = true сначала удалить? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть объекты, подобные приведенным ниже:

@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) в транзакции, он сначала пытается вставить новые элементы списка, а затем удалить старые данные.

Проблема в том, что у моей таблицы есть уникальные ограничения, старые данные и новые данные конфликтуют друг с другом.

это будет нормально работать, если сначала попытаться удалить старые, а затем вставить новые.Есть ли выход из этой ситуации?

...