2014-03-03 65 views
0

我正在使用JPA 2 + Hibernate 4,並且正在對模型實體執行一些CRUD操作。如果相關實體存在,則阻止實體刪除

現在我需要防止某個實體(EntityB)被刪除時,相關實體(EntityA)在數據庫中存在:

@Entity 
public class EntityA { 
    @Id 
    private int id; 

    @OneToOne(mappedBy = "entityA", optional = false, fetch = FetchType.LAZY) 
    private EntityB entityB; 

    //... 
} 

@Entity 
public class EntityB { 
    @Id 
    private int id; 

    @OneToOne 
    @JoinColumn(name = "id") 
    private EntityA entityA; 

    //... 
} 

有沒有辦法實現這個使用關係選項或我應該檢查EntityA在刪除EntityB之前是否存在於我的dao /存儲庫中?

注意我需要這也爲@ManyToOne的關係。

回答

1

如果您想在代碼中阻止該操作,請不要刪除該實體(通過手動檢查)。沒有可能通過註釋來做到這一點。

另一方面,這聽起來對我來說似乎是需要DB約束。如果這些實體已經相關,那麼只需添加一個外鍵約束(如果沒有的話)。如果不是,則考慮添加一個。

PS:如果您已經有關係,請檢查CascadeType.REMOVE設置。

+0

同意數據庫約束。 +1。請CascadeType.REMOVE刪除這條線,它不適合,因爲它只是刪除參考相關領域... – solvator

+0

是的,我認爲設置數據庫約束是我的正確方法。謝謝。 – davioooh

0

我不認爲你可以通過註釋解決這個問題。您應該在之前手動檢查相關實體的存在。