Хотя это и не самое элегантное решение, оно должно работать:
static constraints = {
prop(validator: { val, obj ->
if(obj.a == null) {
return !myModel.findWhere(b: obj.b, prop: val)
} else {
return !myModel.findWhere(a: obj.a, b: obj.b, prop: val)
}
})
}
Я не верю, что есть способ условно проверить уникальность на основе значений свойств без выполнения запроса вручную.