Я думаю, что ваш лучший выбор - это ваш лучший выбор, хотя для этого вам требуется идентификатор экземпляра, который вы хотите по умолчанию. Неплохо продумать это, потому что это может измениться в будущем. Но вы можете посмотреть его, когда приложение запустится и сохранит идентификатор, например.
class BootStrap {
def grailsApplication
def init = {
def usa = Country.findByName('US')
grailsApplication.config.COUNTRY_US_ID = usa.id
}
}
Используйте любую конфигурационную клавишу, которую вы хотите, конечно.
Затем измените Organization
класс для вызова load
в своем конструкторе:
import grails.util.Holders
class Organization {
Organization() {
if (Holders.config.COUNTRY_US_ID) {
country = Country.load(Holders.config.COUNTRY_US_ID)
}
}
String name
static belongsTo = [country:Country]
}
Обратите внимание, что я удалил Country country
свойство, потому что это излишним; добавив, что belongsTo
создает свойство с тем же именем, что и ключ карты («страна»), и тот же тип, что и значение карты (Страна). Это не больно, но это не нужно.
Причина, по которой load
уместна, заключается в том, что она не попадает в базу данных, пока вы не получите доступ к постоянному свойству, отличному от id
. Таким образом, вы настраиваете его для ленивого извлечения реального экземпляра, если это необходимо, но если вы перезапишите это значение другим экземпляром, вы не потратите понапрасну на поиск базы данных для начальной совокупности. Включите ведение журнала SQL, чтобы проверить это.