簡體   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