在我的一個數據模型,其中有屬性映射到枚舉很多這樣的實體:JPA:地圖無效的數據庫值來枚舉
@Enumerated(EnumType.STRING)
private MySpecialEnum enumValue;
MySpecialEnum定義了一些固定值。映射工作正常,如果數據庫爲列保留NULL值,我也在enumValue屬性中獲得NULL。 問題是,我的後端模塊(我沒有影響)使用CHAR列中的空格來標識沒有設置值。所以我得到一個IllegalArgumentException而不是NULL值。
所以我的問題是:是否有JPA事件,我可以在映射到枚舉屬性之前更改從數據庫中讀取的值? 對於寫入訪問,有@PrePersist,我可以將空值更改爲空格。我知道有@ PostLoad事件,但這是在映射後處理的。
順便說一句:我使用OpenJpa在WebSphere Application Server中發佈。
非常感謝您的回答。但我正在尋找更通用的解決方案。對於你建議的方式,我必須爲每個枚舉字段編寫這段代碼,但是我必須爲我的數據模型中的所有枚舉字段實現它。順便說一句,我喜歡讓我的實體簡單和愚蠢。 – 2012-01-21 16:52:15