Итак, я обнаружил ссылки на то, что GORM может по умолчанию DeepValidate доменные классы со свойствами, которые являются другими классами домена. То, что я пока не нашел, это какая-либо ссылка на возможность настроить класс домена так, чтобы он deepValidates свойства, которые являются списками классов домена. Такие как ...
class User {
ObjectId id
String firstName
String lastName
List<Address> addresses
static embedded = [ 'addresses' ]
static mapWith = 'mongo'
static mapping = {
version false
collection 'users'
writeConcern WriteConcern.ACKNOWLEDGED
}
static constraints = {
firstName blank: false
lastName blank: false
addresses minSize: 1
}
}
class Address {
String address1
String address2
String city
String state
static mapWith = 'none'
static mapping = {
version false
}
static constraints = {
address1 blank: false
address2 blank: false
city blank: false
state blank: false
}
}
Так что надуманная пара классов, но должно быть достаточно, чтобы дать идею. Таким образом, верхний класс домена имеет обычные свойства и список других классов домена. Все свойства имеют ограничения. Если я попытаюсь user.save(failOnError: true, flush: true)
пользовательский объект, он потерпит неудачу, если произойдет сбой любого из пользовательских ограничений. Но , если у меня есть экземпляр Address
для пользователя, у которого есть ошибки ограничения, он все равно позволяет пользователю сохранять. Как будто вызов validate()
не является каскадным к элементам. Я подтвердил это, логически вызвав validate()
в верхнем элементе домена во время отладки, и он не сообщает о каких-либо ошибках в верхнем домене, связанных с вложенными доменами.
Похоже, это будет очень обычная практика в мире mon go, и я ожидал, что легко найду документацию, показывающую, как настроить домены для глубокой проверки элементов домена в списках. Но пока ничего не нашел.