裏面我使用的EclipseLink,我有一個JPA實體,基本上是存儲在數據庫中的BLOB數據gzip壓縮的字節數組。但是,這些數據被封裝在一個管理字節數組的類中,並且可以正確解碼(GzipByteArray)。我使用@Converter和@Convert註釋將數據庫中的內部byte []數組轉換爲我的GzipByteArray包裝類。實體實際上將GzipByteArray類存儲爲變量類型。這一切工作正常。的EclipseLink不保存更新到一個領域的實體
然而,當我要追加一些文本到GzipByteArray,我呼籲它的方法,以文本追加。 Eclipselink未檢測到父實體類的此參數的更改。
我把我的GzipByteArray一個.equals()和.hashCode()方法,以確保它考慮到了內部byte []數組中的變化。這沒有幫助。根據我的日誌記錄,eclipselink甚至不會調用.equals()。
我能到被檢測的改變的唯一方法是創建GzipByteArray的新實例,並使用setter方法來修改它。
我假設的EclipseLink使用默認DeferredChangeDetectionPolicy。這個怎麼用?我甚至下載了Eclipselink的源碼,但我無法弄清楚。我可以手動強制這個領域被標記爲「髒」不知何故?對象的實例ID是否必須更改以便Eclipselink檢測它?
我試過兩種方法。如果您在轉換器中將isMutable()設置爲true,或者使用@Mutable標記,它將起作用。爲了清晰起見,我設置了兩個。 在我的情況下,我真的想以一種流式的方式將一些文本附加到我的GzipByteArray中,而不必構造一個新的實例。 謝謝! –