grails: повторяющиеся строки, вставленные даже после уникального ограничения

#grails #duplicates #unique

#grails #дубликаты #уникальный

Вопрос:

Я могу вставить несколько строк с одинаковым значением ActionName: «отбросить» и actionParameter:»». Я хочу избежать этого сценария.

Другие ограничения работают нормально, например, я не могу вставить ActionName: «rate-limit» и actionParameter: «5» дважды.

Вот мой класс домена:

исключение класса {

 String actionName
String actionParameter

static hasMany = [actionFlow:Flow]

static constraints = {
    actionName(blank:false,nullable:false,inList:["discard","rate-limit","redirect"])
    actionParameter(blank:true,nullable:true,unique:'actionName',validator:{val,obj ->
                    if(obj.actionName == 'discard' amp;amp; val != null){ return false}
                    else if(obj.actionName == 'rate-limit')
                    {
                        Utility util = new Utility()
                        if(!util.validateNum(val,0,2147483647))  {return false}

                    }
                    else if(obj.actionName == 'redirect')
                    {
                        if(val == null) {return false}
                        Utility util = new Utility()
                        if(!(util.validateIp(val) || util.validateIpAndPort(val) || util.validateASAndPort(val)) )  {return false}
                    }
    })

}
  

}

Пожалуйста, дайте мне знать, есть ли альтернативный способ сделать это? Заранее спасибо!!

Комментарии:

1. Какую версию Grails вы используете?

2. Я использую grails 2.4.0

Ответ №1:

Это реализация по умолчанию, т. Е. Уникальное ограничение не работает со свойством nullable. Смотрите https://jira.grails.org/browse/GRAILS-10403 проблема со ссылкой на https://jira.grails.org/browse/GRAILS-10178 эта проблема.

Ответ №2:

Я решил это, используя значение ‘null’ в качестве строки в поле, которое обнуляется. Это всего лишь обходной путь, а не решение проблемы.