同一函数

时间:2018-05-27 13:52:23

标签: sql spring postgresql hibernate spring-data

我正在使用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
)

循环

futureVisits
            .forEach {
                visitRepository.delete(it)
                }

0 个答案:

没有答案