Я удаляю объект в цикле, используя функцию удаления из репозитория Crud.Мой объект имеет отношение, которое также должно быть удалено с ним (orphanRemoval) + cascadeType = ALL.Но я заметил, что первая итерация корректно удаляет объект с помощью отношений, и этот sql выглядит следующим образом:
Hibernate:
delete
from
base_interval_last_modifications
where
base_interval_id=?
Hibernate:
delete
from
visit
where
id=?
Hibernate:
delete
from
last_modification
where
id=?
Hibernate:
delete
from
base_interval
where
id=?
Вторая итерация приводит к следующему выражению sql:
Hibernate:
delete
from
visit
where
id=?
Может ли кто-нибудь объяснить мне, как это возможно, чтота же функция на объекте того же типа генерирует другой оператор и фактически не удаляет все отношения правильно?
ОБНОВЛЕНИЕ «больше кода»: в первом цикле baseInterval удаляется правильно, и workInterval остается без изменений, но во втором цикле только посещениеудалено без baseInterval.
@Entity
class Visit(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Int? = null,
@OneToOne(cascade = [CascadeType.ALL], orphanRemoval = true)
@JoinColumn
var baseInterval: BaseInterval? = null,
)
@Entity
class BaseInterval(
id: Int? = null,
@OneToOne(mappedBy = "baseInterval")
var visit: Visit? = null,
@ManyToOne
@JsonIgnore
var workInterval: WorkInterval? = null
)
Loop
futureVisits
.forEach {
visitRepository.delete(it)
}