Grails: Nullable 屬性導致 Unique 限制式失效

Grails 版本: 2.3.11

當 domain 中 unique 條件關聯的屬性包含了 nullable 類型,

grails 會忽視 unique 限制導致誤判,

根據 api 可在 constraints 中加入 validator 來自定義需要驗證的內容。

假設 Domain 定義如下:

Book.groovy
1
2
3
4
5
6
7
8
9
10
11
12
class Book{

  String name
  String title
  Author author
  Publisher publisher

  static constraints = {
      name(unique:['author','publisher'])
      publisher nullable:true
  }
}

由於 publisher 允許為 null,造成 name(unique:['author','publisher'] 沒有正確判斷,

此時可以自行加入判斷如下:

start:8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   static constraints = {
      name(unique:['author','publisher'],
          validator: { name, book ->
              def existingRecord = Book.withCriteria(){
              
                  if (book.id){
                      ne('id', book.id)
                  }

                  eq('author', book.author)

                  if (book.publisher){
                      eq('publisher', book.publisher)
                  }
                  else {
                      isNull('supplier')
                  }
              }//end withCreiteria
          }//end validator
      )
      publisher nullable:true
  }
}

完成後就可以正確判斷 unique 摟~

Comments