#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’ в качестве строки в поле, которое обнуляется. Это всего лишь обходной путь, а не решение проблемы.