2011-09-21 61 views
0

這裏是例子:如何刪除父實體並在hibernate的子FK列中設置null?

@Entity(name="Cat") 
public class Cat 
{ 
    @ManyToOne 
    @JoinColumn(name="FoodId",nullable=true) 
    public Food getFood() 
    { 
     // code 
... 
} 

@Entity(name="Food") 
public class Food 
{ 
    @OneToMany(mappedBy="food",cascade=? 
    public List<Cat> getCats() 
    { 
     // other code 
... 
} 

我想刪除一些食物的實體,所以cat.foodId列設置爲貓,誰該食品null值。

Food fish=new Food() 

Cat bazillio=new Cat() 
bazillio.food=fish 

context.remove(fish) 

if (bazilio.food==null) success() 

Cascade.ALL在我的理解將刪除所有與這種食物的貓(或不是?)那麼如何解決這個任務?

回答

2

其中一個關係應該標記爲inverse。我想這應該是Food.getCats() 食物到貓關係的級聯應該是無的,因爲貓與上的nullable合理無關。

然後刪除食物會像瑞安指定爲簡單..,食物被設置爲指定的食品

  • 設置cat.food

    1. 裝載貓空
    2. 節約貓實例和刪除食物實例(可以任意順序進行)
  • 2

    加載食物爲魚的所有貓,將每隻貓的食物設置爲零,然後刪除食物。你需要處理與你正在刪除的食物併發插入新貓。他們可能會使「刪除食物」交易失敗。

    +0

    謝謝。但在SQL中,我用約束來做到這一點,在休眠時沒辦法做到這一點? –

    +0

    沒錯,但這不是SQL。這是一個ORM。您對對象執行操作,框架將其轉換爲關係數據庫說話。你需要在對象中而不是在SQL中思考。這是您在Hibernate中使用它的正常方式。 –

    1

    保持一致性是程序員的責任。

    JPA 2規格

    注意,它是肩負着維護運行時的一致性 責任的應用程序的關係,例如,用於 確保了「一」和「多「當應用程序 在運行時更新關係時,雙向關係的邊相互一致。

    相關問題