2014-11-02 41 views
0

我是新來的休眠,我不明白Hibernate刪除和保存如何完全內部執行。我不得不在現有的代碼中修復一些東西。代碼當前使用的表沒有定義外鍵,但表中沒有定義刪除級聯。可以Session.Delete表條目,即使該表有一個外鍵約束沒有刪除級聯或null指定

仍然現有的代碼確實從原始表中刪除條目。

我無法弄清楚代碼當前如何處理它。是否可以爲外鍵刪除定義一些休眠設置,而不是在數據庫中定義。 如果是,那麼如何。任何提示都會有所幫助。

回答

0

級聯刪除也可以在休眠中定義。

參見實施例(使用JPA註解):

@Entity 
public class User { 
    @Id 
    private Long id; 

    @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) 
    private List<Address> addresses; 
} 

@Entity 
public class Address { 
    @Id 
    private Long id; 

    private String cityName; 

    @ManyToOne 
    private User user; 

} 

現在假設此代碼示例:

User user = entityManager.find(User.class, 1L); 
entityManager.remove(user); 

刪除用戶將觸發級聯刪除相關聯的地址的。

請注意使用HQL(或JPQL)。它不會觸發級聯刪除,例如, entityManager.createQuery(「delete user where id = 1」)。executeUpdate()會導致FK參考錯誤,可能是

相關問題