2010-10-21 94 views
0

在onetomany協會我試圖刪除所有的許多關聯,看到多個刪除語句正在執行。一鍵刪除與onetomany協會休眠

// The entities 
class Users{ 
... 
    public void setPhones(Set<Phone> phones){ 
     this.phones = phones; 
    } 

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="users", orphanRemoval=true) 
    public Set<Phone> getPhones(){ 
     return this.phones; 
    } 
... 
} 
class Phone{ 
... 
     @ManyToOne() 
     @JoinColumn(name="USER_ID") 
     public Users getUsers() { 
      return users; 
     } 

     public void setUsers(Users users) { 
      this.users = users; 
     } 
... 
} 
//The application code... 
Users u = (Users)s.get(Users.class, new Integer(220)); 
u.getPhones().clear(); 

上面的代碼刪除手機好吧,除了我看到多個刪除語句被髮送到數據庫。我寧願喜歡類似於單個語句:

delete from phone where userid = 220; 

描述one-shot delete混亂,在一個錯誤的結果其實Hibernate文檔。特別是提到的部分:

幸運的是,你可以通過丟棄(即提領)原始集合和當前的所有元素返回一個新實例化的集合力在任何時候這種行爲(即第二個策略)。

用新集合替換集合會導致異常。然後是這條線:

一次性刪除不適用於集合映射inverse =「true」。

我不知道爲什麼。有人可以詳細說明嗎? 如何在onetomany關聯上使用Hibernate執行一次性刪除?

回答

1

該文檔並不令人困惑 - 它只是說這不適用於反轉控制(映射)。所有你需要做的就是刪除多對一的一面和一對多的聲明映射。然後關係的控制由用戶完成,然後單個刪除將會發生。