Hibernate пытается удалить ранее удаленную строку - PullRequest
0 голосов
/ 06 сентября 2018

Существует таблица A со следующими столбцами

id bigint NOT NULL,
b_id bigint
 CONSTRAINT fk1b51366dc7a1b06c FOREIGN KEY (b_id)
      REFERENCES B (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION

Теперь у меня есть объект objectB, в котором есть поле, ссылающееся на значение из таблицы A

@OneToOne(fetch = EAGER, cascade = PERSIST, mappedBy = "b")
private A a;

Сначала я пытаюсь удалить из базы данных значение из таблицы A, связанной с объектом B.

    if (objectB.getA() != null) {
        aRepository.remove(objectB.getA());
    }
    objectB.setA(null);

и затем удалите объект B

bRepository.remove(objectB);

Ошибка возникает при попытке удалить объект B, поскольку кажется, что Hibernate все еще хочет удалить строку из таблицы A, которая уже была ранее удалена, и я получаю это исключение:

javax.persistence.OptimisticLockException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

Какое решение для этого? Почему Hibernate хочет удалить значение из таблицы A, даже если для ссылки на A из objectB установлено значение null? Если я не удаляю сначала связанное значение из таблицы A, то получаю исключение, что на значение objectB.id все еще ссылаются в таблице A.

1 Ответ

0 голосов
/ 06 сентября 2018

Вы должны определить двунаправленную ассоциацию, а затем установить тип каскада для удаления:

//define this association in A
@OneToOne(cascade=CascadeType.REMOVE, optional=true)
    private B b;

и затем удаление, как это сделало бы трюк:

bRepository.remove(objectA.getB());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...