используя наследование в классах домена Grails - PullRequest
1 голос
/ 17 января 2012

У меня ежемесячные классы доменов для разделения транзакций по месяцам [TxnSummaryJan, TxnSummaryFeb..etc]. Теперь я пытаюсь создать класс домена Month, который является абстрактным и в котором определены все поля, так что классы за январь и февраль просто расширяют этот класс и все. Теперь я установил

tablePerHierarchy = 0

в отображении для класса месяца, так что Grails не создает таблицу для этого класса.

Теперь таблицы создаются правильно, но когда я выполняю

Month.createCriteria().get( eq('userid',1)).list() 

выдает ошибку, что функция get () недоступна для класса Month. Но это работает, когда я даю, например,

TxnSummaryJan.createCriteria().get(eq('userid',1)).list()

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


Также, где разместить класс «Домен месяца»? Нужно ли размещать Домен Месяца вне src / Domain, чтобы его таблица не создавалась?

С уважением Priyank

1 Ответ

1 голос
/ 01 февраля 2014

При использовании tablePerHierarchy = false это также означает, что базовая таблица не будет создана.Вместо этого он будет создавать одну таблицу в месяц.Единственный способ выполнения запросов к Месяцу - это выполнение запросов ко всем конкретным подклассам Месяца и затем как-то объединить результаты.Я думаю, что это могло бы быть возможно с GORM, но также подразумевало бы странные / сложные запросы с, возможно, непредвиденными проблемами производительности.

Если вы планируете не создавать базовую таблицу в базе данных, просто переместите базовый класс в src / groovy и отметьте его как абстрактный.Затем установите для tablesPerHierarchy значение true, как по умолчанию.Таким образом, все ваши данные оказываются в одной таблице, но вы можете получить доступ ко всем своим данным одновременно.

см. http://grails.org/doc/latest/guide/GORM.html#inheritanceStrategies для справки.

...