2012-10-04 27 views
3

我正在使用rev偵聽器的默認實現,並且如我所料,REVINFO表中的列是:revtstmp和rev。爲什麼重寫更改列名

然而,當我重寫默認的 - 我所做的就是:

... MyRevisionEntity extends DefaultRevisionEntity 

那些列名稱已更改爲「時間戳」和「ID」。

任何人都知道爲什麼?

使用envers 4.1.5_Final ...

**編輯** 由於目前還沒有人回答,我加入了更多的信息。

Adam Warski創作的「DefaultRevisionEntity」類僅定義了兩個成員: private int id;

and private long timestamp;

因此,我明白當我擴展那個類時,那些將是我應該期望的列名。然而,這個「令人困惑」的問題是:爲什麼當我沒有擴展默認值時,列是不同的(分別是rev和revtstmp)以及文檔的說明?

感謝您的幫助!

回答

0

簡短的回答是因爲當你沒有擴展時,Envers使用一個默認配置,這些配置的列名是硬編碼的,例如,它們不是源自實體類的元數據。當您擴展DefaultRevisionEntity時,Envers默認使用標準的ORM命名策略。

從技術上講,RevisionInfoConfiguration是這裏的罪魁禍首。

作爲Envers的引導程序的一部分,該類的#configure()方法被調用並且它在定義的實體中搜索自定義修訂實體實現。如果檢測到實現,Envers基本上像其他實體一樣映射類。

但是,如果沒有檢測到定製的實現,generateDefaultRevisionInfoXmlMapping叫,它會自動建立相應的XML結構,它使用了@RevisionNumber@RevisionTimestamp註釋字段硬編碼的列名;如果您獲得名爲REVREVTSTMP的列。

我註冊了一個JIRA問題HHH-11325來解決這個問題。