2011-05-10 40 views
2

我想爲我的java應用程序實現一些簡單的審計功能。這是我的審計類的一個片段:將通用java類型保存/加載到postgresql數據庫列

public class Audit<C, T> { 
    public final Class<C> modifiedClass; 
    public final Date modificationTime; 
    public final MyFieldMeta<C, T> fieldMeta; //contains Class<T> 
    public final T newValue; 

    //constructor, etc... 
} 

當談到堅持這些審計對象,我寧願只有一個表,用於存儲獨立的什麼T是所有品種。我正在使用postresql,而且我想知道將newValue保存到列的最佳方法是什麼,然後再將它取回。

newValue是不限於具有等同的PostgreSQL相當簡單的類型 - StringIntegerDate等,所以存儲該值作爲text並在單獨的列中的類型爲varchar,然後映射回在java不會太難。有沒有一種更方便的方法?

回答

1

一旦你'扁平化'數據庫中的數據類型,你將依靠邏輯將其轉換回來,這可能會導致問題。考慮價值:11.12

那是文本11.12,如章節號碼? 11.12就像貨幣價值一樣?那是十二月十一號?

除非您可以保證某個值始終可以明確映射到某個類型,否則唯一的解決方法是在字段中添加一個額外的類型標記,然後您必須將其解析出來,例如:s11.12表示「一串價值11.12」。

+0

正如我所說,我可以存儲類型和值,所以推斷類型不是問題。我想我的問題是a)是否有比我提到的選項更優雅的方式?和b)這種方法/體系結構對於簡單的審計功能通常有意義嗎? – 2011-05-10 14:42:11

+0

這種方法很簡單,如果不是很優雅。更好一點和更靈活的是爲該類型設置一個單獨的列。對於簡單的審計,應該沒問題。請注意稍後在添加對新數據類型的支持方面的限制。如果數據類型不會改變(很多),那麼你不應該有維護問題。 – 2011-05-10 15:37:55

相關問題