2012-09-10 66 views
0

我有一個ClientAttribute域類,有2個字段:name (String) & project (Project)ProjectClientAttribute之間存在一對多關係在單個項目中,所有名稱都必須是唯一的。如何在Grails中使用自定義驗證器來正確檢查字段唯一性?

起初我以爲關於創建以下驗證:

name(blank: false, validator: { val, obj -> 
      if (ClientAttribute.findByProjectAndName(obj.project, val)) return ['clientAttribute.name.unique'] 
     }) 

不幸的是,ClientAttribute創建新實例時我通過增加新的實例,以項目實例clientAttributes場和保存項目實例做。這又保存了集合clientAttributes中剩餘的對象。當在集合中保存第二個對象時,驗證器被觸發,並且會引發錯誤,因爲findBy()方法返回相同的對象。

我想知道,執行這種檢查的正確方法是什麼? 我可以修改查詢不返回與當前保存的相同的對象,但我想知道是否沒有簡單的解決方案來解決我的問題?

感謝

回答

1

也許我不明白你的域模型,但什麼阻止你在兩個項目和名稱ClientAttribute使用Grails Unique Constraint?像這樣:

name blank: false, unique: 'project' 
+0

我不知道爲什麼我認爲該字段是布爾值只。該死!謝謝大衛! – Krystian

相關問題