У меня есть два класса домена CGroup и Directory, я хотел бы моделировать CGroup, у которой много каталогов, однако один из этих многих каталогов известен как «корень» и напрямую доступный из CGroup. Любая CGroup должна иметь только один корень., И каскады все равно должны работать так, что удаление любой директории удаляет все ее дочерние элементы.Прямой доступ GORM к экземпляру в hasMany отношениях
Хотя неправильно, это то, что я до сих пор:
class CGroup{
...
Directory root
static hasMany = [directory:Directory]
static constraints = {
root(unique:true)
}
}
class Directory {
static hasMany = [children:Directory]
...
static belongsTo = [parent:Directory,
cgroup:CGroup]
static constraints = {
parent nullable: true
}
}
в основном, я просто нужна ссылка на один экземпляр из «многих» коллекции, хранящейся в «одной» стороне
Да! это именно то, что я искал, проблема заказа, которую вы заявили, была точной проблемой, с которой я столкнулся, но я не был так хорошо знаком с пользовательскими валидаторами. Кроме того, я думал, что, возможно, упустил что-то очевидное, поскольку это показалось довольно распространенным сценарием. Одна вещь, в вашем последнем блоке кода не должен быть второй addToDirectory, который действительно является вызовом setRoot? Cheers – Alexjjsmith
Нет, сначала устанавливается корень, а затем добавляются два дополнительных экземпляра в общей сложности 3. Порядок там не имеет значения, если при вызове save() второй раз устанавливается root, и этот экземпляр находится в hasMany, необязательно вместе с некоторыми дополнительными экземплярами. –