РЕДАКТИРОВАТЬ: Согласно моему ответу ниже, это кажется исправленным с помощью «очистки Грааля». Вы в отчаянии бьетесь головой и иногда не замечаете очевидного.
Некоторое время у нас была следующая структура объектов предметной области:
abstract class Company {
String name
...
}
и несколько дочерних элементов, подобных приведенным ниже, с разными объектами-"владельцами". Каждый конкретный класс имеет свою таблицу в БД.
class CompanyChild extends Company {
static belongsTo = [owner:SomeDomain]
...
}
Я добавляю еще одно свойство к абстрактному родителю по разным причинам, поэтому родитель теперь выглядит примерно так (CompanyType — это перечисление):
abstract class Company {
String name
CompanyType companyType
...
}
Все это кажется довольно простым. Сейчас в фирменном сервисе где-то так делаю:
log.debug("Saving new company type=$companyType")
def company= new Company(name: 'Acme', companyType: companyType, <other properties here>)
log.debug("company object has type=${company.companyType}")
В журнале показано...
CompanyService Saving new company type=NONPROFIT
CompanyService company object has type=null
Что, черт возьми, здесь происходит? Действительно кажется, что ${company.companyType} не должно быть нулевым.
Если я добавлю company.companyType = companyType после создания объекта, он работает, но я кое-что не понимаю.
Изменить: версия Grails 2.3.11