2013-02-01 136 views
1

我有一個域類有一堆不可空字符串。對於其中一個域屬性,我稱之爲自定義驗證程序,它執行數據庫檢查。當我的原始域對象中有一個字段無效時,在定製驗證期間,域對象嘗試刷新。這導致'非空屬性引用空值或瞬態值'錯誤。我的休眠模式設置爲手動模式,所以我不知道它爲什麼會嘗試刷新。Grails的非空屬性在驗證過程中引用空值或瞬態值

String id 
String name 
String type 
String description 


static constraints = 
{ 
    id unique: true, nullable:false 
    type unique:false, nullable: false 
    name(unique:['type'] nullable: false, blank:false, 
     validator:{val, obj -> 
      if(val != null) 
      { 
        def result = OtherDomain.findByType(val) 
        if(result == null) 
        { 
         return 'foreignkey' 
        } 

      } 

     }) 


    description unique:false,nullable: false 

} 

static mapping = 
{ 
    table 'track' 
    id column:'id', type: 'string', generator: 'assigned' 
    version false 
} 

沒有其他域修改正在進行。這是此次交易中唯一編輯的域。

回答

2

Grails通常會在任何查詢之前刷新休眠會話,因此OtherDomain.findByType(val)正在導致刷新。您可以通過在單獨的休眠會話中執行查詢來解決此問題,如下所示:

OtherDomain.withNewSession { session -> 
    def result = OtherDomain.findByType(val) 
    if (result == null) { 
     return 'foreignkey' 
    } 
} 
+0

這就解決了問題,並驗證了它的背景。謝謝! – Joseph

相關問題