У меня есть требование частичного обновления объекта с помощью rest api в весенней загрузке приложения, но я получаю сообщение об ошибке. Ниже приведен код
Субъект счета
@Data
@Entity
@Table(name = "accounts")
@EqualsAndHashCode(callSuper = true)
public class Account implements Serializable {
private Integer tcgId;
private String emailAddress;
@Transient
private String password;
private String passwordHash;
@Transient
List<ClientCategory> categories;
@NotNull
@ApiModelProperty(required = true)
@Enumerated(EnumType.STRING)
private AccountType type;
@NotEmpty
@ApiModelProperty(required = true)
private String firstName;
@NotEmpty
@ApiModelProperty(required = true)
private String lastName;
private Boolean active = false;
@NotNull
@ApiModelProperty(required = true)
@Enumerated(EnumType.STRING)
private PhoneContactPreference phoneContactPreference;
private String profilePictureUrl;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "accountId", nullable = false)
private List<AccountRole> accountRoles;
@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL)
@JoinColumn(name = "accountId", nullable = false)
private List<AccountPhoneNumber> phoneNumbers;
public enum AccountType {
ACCOUNT, CONTACT
}
public enum PhoneContactPreference {
CALL, TEXT;
}
}
Ниже моя сущность AccountRole
@Data
@Entity
@Table(name = "accountRoles")
public class AccountRole {
@Id
private Integer id;
@ManyToOne
@JoinColumn(name = "role")
private StretchRole role;
private Integer clientId;
}
Ниже приведен код для обновления учетной записи
Account currentAccount=accountService.getAccountById(account.getId());
currentAccount.setAccountRoles(account.getAccountRoles());
currentAccount.setPhoneContactPreference(account.getPhoneContactPreference());
currentAccount.setFirstName(account.getFirstName());
currentAccount.setLastName(account.getLastName());
return accountService.save(currentAccount);
Когда я запускаю этот код, я получаю ошибку ниже
Caused by: org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:accountRoles
Если я напрямую вызываю метод save для учетной записи, он просто отлично работает, но переопределяет другие значения с нулем / ложью, которых нет в объекте Account.