Я пытаюсь установить двунаправленное отношение один к одному, и при обновлении AccountExtrasModel при первом сохранении все работает нормально, но при обновлении я получаю либо ошибку, либо операторы sql добавляют вставку, а затем удаляют вместо обновления.
import lombok.*;
import javax.persistence.*;
@ToString
@NoArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "Account")
public class AccountModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Account_ID;
@Column(nullable = false, updatable = false)
private String name;
@Column(nullable = false, unique = true, updatable = false)
private String email;
@Column(nullable = false, updatable = false)
private String password;
@OneToOne(mappedBy = "accountModel", cascade = CascadeType.ALL, orphanRemoval = true)
private AccountExtrasModel accountExtras;
public AccountModel addExtras(AccountExtrasModel accountExtrasModel) {
accountExtrasModel.setAccountModel(this);
this.setAccountExtras(accountExtrasModel);
return this;
}
}
import lombok.*;
import javax.persistence.*;
@Setter
@Getter
@NoArgsConstructor
@ToString
@Entity
@Table(name = "AccountExtras")
public class AccountExtrasModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long ID;
@OneToOne(fetch = FetchType.LAZY)
@MapsId
private AccountModel accountModel;
@Lob
private String description;
private String[] myVideos;
private String[] likedVideos;
private String imageReference;
}
Если я изменю @MapsId на @JoinColumn в AccountExtrasModel, то получу желаемый результат, но при этом вставлю новую строку и свяжу ее с учетной записью, а затем удалю старую строку вместо обновления.
Это ошибка, которую я получаю:
{
"timestamp": "2018-04-26T18:19:01.657+0000",
"status": 500,
"error": "Internal Server Error",
"message": "A different object with the same identifier value was already associated with the session : [com.alttube.account.models.AccountExtrasModel#1]; nested exception is javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.alttube.account.models.AccountExtrasModel#1]",
"path": "/update_account"
}
Что я могу сделать, чтобы получить желаемый результат, который заключается в простом обновлении учетной записи ExtrasModel соответствующей учетной записи, к которой он принадлежит?