Sql 同一函数的不同删除结果

Sql 同一函数的不同删除结果,sql,spring,postgresql,hibernate,spring-data,Sql,Spring,Postgresql,Hibernate,Spring Data,我使用Crud存储库删除函数删除循环中的对象。我的对象具有也应与其删除的关系(孤立删除)+级联类型=全部。 但我注意到,第一次迭代正确地删除了具有关系的对象,并且该sql看起来: Hibernate: delete from base_interval_last_modifications where base_interval_id=? Hibernate: delete from vis

我使用Crud存储库删除函数删除循环中的对象。我的对象具有也应与其删除的关系(孤立删除)+级联类型=全部。 但我注意到,第一次迭代正确地删除了具有关系的对象,并且该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
)
环路


你能发布代码的其余部分吗:实体+删除调用function@Elgayed我已经发布了可能需要修复的最重要的代码。您是否检查了第二次访问对象是否具有BaseIntervalyes。它看起来几乎像第一个,但有另一个id。
futureVisits
            .forEach {
                visitRepository.delete(it)
                }