繁体   English   中英

如何在hibernate注释中使用级联类型保存,删除,更新

[英]How to use cascade type save,delete, update in hibernate annotation

任何人都可以解释一下hibernate注释如何使用不同类型的级联,如delete,upadte,save-update?

如何确保删除所有者时,其车辆也会被删除(但不是相反)

 @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。 一般来说,我更喜欢使用持久性。

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

对于save-update,这是一个使用persist或update的hibernate快捷方式,具体取决于对象的状态。 由于你已经覆盖了持久性和更新(见上文),你不需要对此进行级联。

要级联删除,您可能希望使用@OrphanRemoval 这将确保如果关系的父级被删除,孩子也会消失(但不是相反)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM