2013-12-09 47 views
0

從2.2.x升級到2.3.x後,我的Grails項目遇到了一些奇怪的行爲。我有三個簡單的域類型用於典型的CMS功能:發佈,分類,標籤,使郵政有許多類別和標籤。Grails 2.3.x升級產生重複有許多關係

static hasMany = [categories: Category, tags: Tag] 

創建帖子時,用戶從g:select ... multiple =「multiple」中選擇適用的類別。每個類別只在多選中顯示一次。但是現在查詢某個類別的帖子正在返回同一帖子的多個條目。檢查MySQL數據庫連接表「post_category」由Grails的創造,我可以看到,確實有多個條目:

Post_categories_id | category_id 
-------------------|------------ 
30000    | 1 
30000    | 1 
30000    | 2 
30000    | 2 

有沒有人見過類似的行爲?建議修復?現在我只是手動清理通過SQL重複。

回答

1

我在升級時沒有類似的行爲。但是,我真的不記得有多少關係看起來像什麼。幾個問題/考慮因素:

  • 您的許多關係仍然是一個集?您是否爲hasMany關係的域類型實現了hashCode()和equals()? IIRC,這應該強制唯一性。有一點需要考慮,如果不能在當前數據集上強制執行,則此唯一約束將在創建後立即失敗。據說,你可以用SQL查詢清理當前的數據集。

  • 它看起來像是根據column1和column2對這些數據進行分組,您將獲得您正在查找的數據集。您可以隨時以這種方式檢索記錄。有點骯髒,並不理想,但它會讓你運作,直到找到根解決方案。

我會繼續環顧四周。如果您發佈帖子,類別和標籤的域名,它可以提供幫助。只有它的重要性(約束,靜態有很多地圖和屬性本身)是必要的。

此外,您可以打開詳細日誌記錄並查看創建新帖子時正在運行的SQL語句。我的猜測是這裏正在發生。從創建帖子的視圖到post.save()調用的流程片段也可能會有所幫助。

+0

實現equals()和hashCode()確實強制唯一性,謝謝!我留下了一個奇怪的行爲,仍然是這樣的,當在UI上取消選擇時,類別不會被刪除。對於任何面臨問題的人,在我從params重建對象之前,我暫時放入了一個「postInstace.categories.clear()」。這有效,但仍然不正確。 – derdc