gpt4 book ai didi

java - 如何在hibernate注解中使用级联类型保存、删除、更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:06 24 4
gpt4 key购买 nike

任何人都可以向我解释 hibernate 注解如何使用不同类型的级联,如删除、更新、保存更新吗?

我怎样才能确保当车主被删除时,它的车也被删除(而不是相反)

 @Entity
public class Owner
{
@OneToOne(cascade=CascadeType.ALL)
private DrivingLicense license;

@OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Collection cars;

...
}

@Entity
public class DrivingLicense
{
private String serialNumber;

...
}

@Entity
public class Car
{
private String registrationNumber;

@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Owner owner;

...
}

最佳答案

这里的陷阱是有两个 CascadeType 枚举。一个来自 javax.persistence,另一个来自 hibernate。一般来说,我更愿意使用持久性。

对于级联更新,请记住“更新”是一个 hibernate 术语,jpa 不知道这一点。 Jpa 不需要它,因为在 JPA 中的想法是您更新的字段将自动刷新到数据库。如果您对关系进行了任何更改,这些更改也会刷新。所以你不需要级联更新。

对于保存更新,这是一个 hibernate 快捷方式,可以根据对象的状态使用持久化或更新。由于您已经涵盖了持久化和更新(见上文),因此您不需要级联。

要级联删除,您可能想改用@OrphanRemoval。这将确保如果关系的父项被删除,子项也将消失(但反之则不然)。

    @OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
@OrphanRemoval
private Collection cars;

关于java - 如何在hibernate注解中使用级联类型保存、删除、更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21230688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com