При попытке обновить объект, HibernateOptimisticLockingFailureException - PullRequest
0 голосов
/ 25 ноября 2018

Это моя сущность:

@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() {
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...