假设我在 Grails 2.1.5 项目中有一本现有的域书。到目前为止,我总是从这个表中删除 Books。但现在我不想物理删除书籍,而是存档它们。这样我就不必更改执行 Book.get/findXX/executeQuery/... 甚至 Author.books -> 的代码中的任何内容,以便我只找到未存档的书籍。
所以我认为使用扩展域类可能会很好(因为 Grails > 2.x)。
例如
class ArchivableBook {
// some properties
static mappings = {table 'book'}
}
class Book extends ArchivableBook {
// ...
}
class HistoricalBook extends ArchivableBook {
// ...
}
(也许让 HistoricalBook 扩展 Book 就足够了)
我知道在数据库级别上,Book 中会有一个“类”列,用于识别它是 Book 还是 HistoricalBook。
所以这是我的问题:现在存档一本书的最佳方式是什么?不知何故,在我看来,我只需要将类列设置为新值......但到目前为止,我还没有弄清楚如何以简单的方式做到这一点。是否可以将 Book 转换为 HistoricalBook 而不是保存它?或者我是否必须删除这本书并创建一个具有相同 ID 的 HistoricalBook?