假設我在Grails 2.1.5項目中擁有現有的域名簿。到目前爲止,我總是從這張表中刪除圖書。但是現在我想不要刪除圖書,而是將其歸檔。這樣我就不必在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延長書)
我知道,在數據庫級別都會有書列「類」,將確定如果它是一本書或一HistoricalBook。
所以這裏是我的問題: 現在存檔書的最佳方式是什麼?不知怎的,在我看來,我只需要設置類的列爲新的價值......但到目前爲止,我沒有弄清楚如何以一種簡單的方式做到這一點。是否可以將Book投入到HistoricalBook並保存?或者,我是否必須刪除該書籍並使用相同的ID創建一本HistoricalBook?
嘿,謝謝你的回答。 不幸的是,這並不能解決我的主要問題 - >不顯示存檔的書籍。 Book.get Book.findXX Book.executeQuery Author.books ... 遍佈應用。 我想用這個構造來'刪除'書籍。只有在需要的地方纔能找到HistoricalBooks。例如跟蹤Book.id所在的日誌文件。 我知道我可以覆蓋獲取者和內容,但這是我的第一槍,結果太冒險,無法維護。 – user2808204
對不起,我沒有意識到這已經在生產中。我修改了我的答案以反映替代方法。除上述響應外,您還可以查看[多個數據源](http://grails.org/doc/latest/guide/single.html#multipleDatasources)來歸檔數據。例如複製到'歸檔'數據源並從'生產'中刪除。 – dspies
嘿,再次感謝;) 是的,我也在考慮這一點。我的案例中的Book表格並不是那麼龐大,這就是爲什麼我喜歡在一個表格中使用鑑別器和所有對象的想法。 我希望有一種方法做這樣的事情: ArchivableBook書= Book.get(1) 書=書作爲HistoricalBook book.save() 或相似,只是更新鑑別有價值的東西。 回退會是這樣的: 書書= Book.get(1) 歷史hbook =新HistoricalBook(book.properties) hbook.id = book.id book.delete() hbook.save() 這就是我需要用你的方法歸檔 – user2808204