Как создать и проверить XOR для двух полей в доменном классе Grails?

У меня возникла проблема, связанная с тем, что в моем классе домена есть два возможных взаимоисключающих внешних ключа: либо серийный номер, либо устаревшее значение поиска.

Поскольку я не уверен, какой из них у меня будет для каждой данной записи, я сделал их обе обнуляемыми и добавил пользовательскую проверку, чтобы попытаться убедиться, что у меня есть одно и только одно значение.

package myproject 

class Sample {

    String information
    String legacyLookup
    String serialNumber

    static constraints = {
        information(nullable: true)
        legacyLookup(nullable: true)
        serialNumber(nullable: true)

        legacyLookup validator: {
            return ((serialNumber != null && legacyLookup == null) || (serialNumber == null && legacyLookup != null))
        }

        serialNumber validator: {
            return ((serialNumber != null && legacyLookup == null) || (serialNumber == null && legacyLookup != null))
        }
    }
}

Я создал экраны CRUD по умолчанию и попытался создать запись для этого класса домена

information: Blah Blah
serialNumber: 
legacyLookup: BLAHINDEX123

. Это умирает в валидаторе со следующим сообщением:

No such property: serialNumber for class: myproject.Sample

Что мне не хватает?

5
задан GeoGriffin 14 July 2012 в 04:20
поделиться