Это моя сущность:
@Entity
public class BookRisk extends CustomerBaseEntity<BookRisk, BookRiskDTO> {
private String bookRiskData;
private OffsetDateTime externalQueryDate;
@OneToOne
private Cafe cafe;
BookRisk bookRisk = bookRiskDataRepository.findByCafeId (cafe.getId ());
if (bookRisk == null) {
return bookRiskDataRepository.save(
new BookRisk(bookRiskData, getExternalQueryDate(bookRiskData), cafe)).getId();
} else {
return bookRiskDataRepository.save(
bookRisk.modifyBookRisk(bookRisk, request.getBookRiskData(),
getExternalQueryDate(bookRiskData))).getId();
}
}
Здесь я хочу создать новый BookRİskData
объект, если он не был сохранен ранее.Нет, я хочу установить значения из запроса и сохранить снова для обновления.
Для обновления он создает другой объект, а затем выдает ошибку:
HibernateOptimisticLockingFailureException : Object of class BooktRisk] with identifier [8]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : BookRisk#8] (Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) :
Я думал, что это потому, что всначала я использую
findByCafeId
, затем я делаю
save
, но я не уверен в этом.
Метод обновления:
public BookRisk modifyBookRisk(BookRisk bookRisk, String bookRiskData, OffsetDateTime externalQueryDate) {
bookRisk.setExternalQueryDate(externalQueryDate);
bookRisk.setBookRiskData(bookRiskData);
return bookRisk;
}
Я не изменяю version
или id
.Когда он сохраняется во второй раз, он также увеличивает версию.
И у него есть другой идентификатор конечно.
Может ли это быть из-за cafe
?
COnstructor:
public BookRisk(String bookRiskData, OffsetDateTime externalQueryDate, Cafe cafe) {
this.createStamp = EntityActivityDateTimeStamp.fromContext();
this.modifyStamp = createStamp.copy();
this.bookRiskData = bookRiskData;
this.externalQueryDate = externalQueryDate;
this.cafe = cafe;
;
}
public BookRisk() {
}