Во многих прошлых проектах я использовал подход это JPA / Hibernate для добавления возможностей аудита в систему. Очень эффектно и ненавязчиво.
Есть ли альтернатива Grails @MappedSuperclass (если не считать кодирования объектов модели предметной области на Java вместо Groovy)? Как можно объявить родительский класс в подходе «таблица на подкласс», не создавая для него таблицу? Я читал документацию GORM (5.2.3 Наследование в GORM), но кроме обсуждения таблицы на иерархию и таблицы на подкласс, я не нашел никаких подробностей о том, как это сделать.
В качестве альтернативы, каков рекомендуемый способ достижения этого типа аудита в Grails?





ОК, поискал еще немного и ответил на свой вопрос :)
По сути, это так же просто, как объявить MappedSuperclass абстрактным, и grails не создаст для него таблицу. Я понял с помощью перечитать руководство (RTFM в основном ... творит чудеса): «GORM поддерживает наследование как от абстрактных базовых классов, так и от конкретных постоянных сущностей GORM». Т.е. конкретные классы постоянны, а абстрактные - нет. Платит за внимательное прочтение.
Например.
abstract class Auditable {
Date dateCreated
Date lastUpdated
}
class Book extends Auditable {
String title
String description
}
Будет создана только книжная таблица, и у нее будет
date_created
и
last_updated
столбцы. Кроме того, в качестве дополнительного бонуса Grails имеет свойства dateCreated и lastUpdated как с автоматической отметкой времени.
Надеюсь, это поможет другим.
@HussainFakhruddin, ты имеешь в виду 2.x, верно? Мы используем 2.5.4
Да, по какой-то причине это больше работает в Grails 2. Класс Abstract получает собственное определение таблицы? Спрашивали на форуме Grails, но, похоже, никто не знает, почему это было изменено. Кто-нибудь знает, почему или знает обходной путь или настройку?