2017-12-18 201 views
0

我有一個域類,它擴展了另一個具有相同名稱但不同包中的groovy類,但是在不同的庫中。Grails 3.1.1 - 模型類擴展另一個常規類時髒檢查不工作

問題是,當我修改域類上的實例時,它沒有標記爲髒&因此更改不會持久。

我讀過那個grails 3發行版有一些增強的髒檢查&這可能是一個bug或者我錯過了一些東西。

新對象正確保存沒有任何問題,我已經使用isDirty()修改域對象以及修改的屬性&上方法都返回。對象附加到會話中,通過確定isAttached()

爲了重現,我創建了一個測試項目,代碼如下:&嘗試更新使用腳手架生成的默認grails視圖中的對象,但這些更改仍未保留。

注意:我已經做了類似的東西在Grails 2.4 &它曾經工作。

域類如下:

package com.perseus 

class Derived extends Base{ 

    static constraints = { 
     name blank: false, nullable: false 
    } 

} 

基類中的src /主/常規

package com.perseus 

class Base implements Serializable { 

    private static final long serialVersionUID = 1L 

    String name 

} 

控制器

package com.perseus 

class DerivedController { 

    static scaffold = Derived 

} 

鏈接到github project

Isssue:即使模型已被修改,模型也未標記髒。當模型類擴展另一個常規類時會發生這種情況。

如何重現:

  1. 運行應用程序。
  2. 創建一個新模型對象(型號名稱衍生)
  3. 使用編輯視圖修改對象&單擊更新。
  4. 您將看到修改不會持續。
+0

這裏沒有足夠的信息來知道什麼是錯的。有很多解釋爲什麼一個對象在嘗試更新後可能不會被認爲是髒的。 –

+0

我會嘗試用一個非常小的項目重現它並共享一個鏈接。說實話,沒有什麼要補充的,我的觀點是使用腳手架創建的,當我更新域時,更改不會持續。給我一些時間,我會回來更多的細節。 –

+0

使用示例代碼更新了問題,還給出了重現項目問題&github鏈接的步驟。 –

回答

0

最後,我找到了一個參考here,它說明了無法更新髒檢查狀態的原因。

我加了@DirtyCheck註解它解決了這個問題。

但是這對我們的圖書館的設計有負面影響。

我們對每個類別單獨的項目:

  • 業務模型類
  • 業務邏輯類
  • 用戶界面

的想法是有完全相互獨立的模塊。因此,任何UI技術都可以使用模型&業務邏輯liraries。現在的問題是,我不得不向我的業務模型項目添加gorm依賴註釋。

compile 'org.grails:grails-datastore-gorm:6.1.7.RELEASE' 

設計明智的,我們喜歡在完全獨立的UI或持續性的技術如Hibernate的項目我們的模型類。以便這些模型類可以用於各種不同的項目,而無需任何額外的依賴項。我們通過創建一個新的類來實現這一點,它擴展了我們庫中的實際模型類

有沒有什麼辦法可以解決這個問題,而不需要修改基類?

簡而言之,模型類(POJO)現在依賴於grails框架,而在早期版本中,它們不是。

+0

我懷疑,你在這個答案中的問題會得到很多的曝光。爲什麼不創建一個新的問題並在那裏提供這個答案? – cfrick