我最近從Grails 2.2.5升級到2.4.2。升級後,我的很多hasMany關係都沒有保存。hasMany保存不工作Grails 2.4.2升級
例如:
Domains:
class Node {
String name
String description
static belongsTo = CustomGlobe
static hasMany = [containers: Container]
}
class Container {
String name
CustomGlobe customGlobe
static belongsTo = Node
static hasMany = [nodes: Node]
}
class CustomGlobe {
String name
static belongsTo = CustomLocation
static hasMany = [customLocations: CustomLocation, nodes: Node]
}
class CustomLocation {
String name
String description
}
在執行我添加了@Transactional類DEF上述交易的服務。我還試圖根據Grails 2.4.2: Strange cascading save behaviour in nested transactions添加@Transactional(propagation = Propagation.REQUIRES_NEW)。如果我回滾Grails升級(相同的控制器,服務和視圖代碼),節點集合將被正確保存,但是,對於Grails 2.4.2而言,它不會。我也在保存之前和之後通過打印對象的節點進行了檢查,並且它顯示在控制檯上,但是當我的應用程序重定向到列表視圖時,它不會顯示並且不會在任何地方持久保存。
--UPDATE-- 這仍然發生在Grails 2.4.3 我也相信它可能與連接表有關,但我不明白爲什麼。容器在params綁定後具有附加的節點,但在.save()之後,它不會保留到連接表中。
--UPDATE-- 對不起,域類代碼的帖子中有錯誤,它已被更新,現在是正確的。希望有人能夠闡明我現在想念的東西。
Nodes集合未被持久保存到NODE_CONTAINERS表中的Container實例時發生此問題。
--UPDATE - 問題正在進行中。在調試時,我使用Grails數據源創建了一個新的Groovy Sql實例,並手動將節點插入到NODE_CONTAINERS表中。一切正確保存並在查看容器show gsp時被正確調用。所以看起來,GORM在讀取實例時正確地處理了連接表,仍然不確定爲什麼它沒有正確地將節點保存到連接表中。
應用示例演示的錯誤:
- 工作的應用使用Grails 2.2.5(2.2.5分支)以上使用Grails 2.4.3(MASTER分支)描述
- 應用表現出錯誤
(https://github.com/bwagner5/grailsCollectionsDebugApp/tree/master)
Grails的數據粘合劑:
這個問題似乎是Grails數據綁定器。 Spring Data Binder工作正常(在2.2.x中是默認的,你可以在2.3.x中重寫Grails聯編程序,但不能在2.4.x中) 我已經放入了JIRA,但仍然希望看看是否有解決方法現在: https://jira.grails.org/browse/GRAILS-11638
您是否正確升級了所有插件?一些老插件與新的Grails存在錯誤。 – wwarlock
是的,我沒有正確升級。它似乎不喜歡joinTable。如果我在綁定參數數據後打印對象,我可以看到節點的集合,但在保存()後,它們不見了。我檢查了hasErrors,它沒有任何東西。其他一切都正確(名稱和說明)。有什麼想法嗎? –
'Node'有許多'Container','Container'有很多'Node',但'Node'屬於'CustomGlobe',而不是'Container'。那是故意的嗎? –