我使用Grails 2.2.4
和Java 7
(這些是我無法更改的約束)創建應用程序,當嘗試刪除多對多關係中的多個條目時,許多人有許多集合。從Grails一對多關係中刪除多個項目
我有一個名爲Sport
類,它包含以下內容:
Class Sport{
String name
static hasMany=[category:Category]
static belongsTo = [Category]
}
而另一個名爲Category
:
Class Category{
String name
static hasMany=[sports:Sport]
}
現在,當我CategoryController
我嘗試從sports
刪除多個Sport
的情況下,我的代碼編譯並運行沒有錯誤,但出於原因,只有一個選定的實例被實際刪除。
如果我從一個形式得到Sport
列表和Category
ID和嘗試在列表中的每個客體運行下面的代碼:
def categoryInstance = Category.get(idCategory)
def sportInstance = Sport.get(idSport)
if(sportInstance!=null){
categoryInstance.removeFromSports(sportInstance)
}
categoryInstance.save()
只有最後一個實例被刪除。
如果我運行
def categoryInstance = Category.get(idCategory)
def sportInstance = Sport.get(idSport)
if(sportInstance!=null){
categoryInstance.removeFromSports(sportInstance)
categoryInstance.save()
}
只有第一個被刪除。
請注意,此代碼在params.sport.toList()
列表中從for
循環內運行。
我的猜測是,這是由於我的運動集在第一次刪除之後以某種方式「更改」,因此Hibernate無法找到下一個實例,或者我的保存方法提交了第一個更改,然後「忘了「下一個。
有關如何一次刪除多個實例的任何建議?
閱讀本文應該幫助http://spring.io/blog/2010/07/02/gorm-gotchas-part-2/ –
感謝您的回答,我不是想刪除實際的運動數據庫中只有一個類別和(多於)其中一個相關體育項目之間的關係。 –