Другой результат удаления одной и той же функцией - PullRequest
0 голосов
/ 27 мая 2018

Я удаляю объект в цикле, используя функцию удаления из репозитория 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)
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...