假設我已經創造了我希望堅持的課程。我無法更改它的代碼,即不能在其中添加任何註釋。此外,類不遵循bean約定。是否有可能在休眠中映射自定義的最終類?
I.e.它是任意複雜的類,我希望堅持下去。
是否有可能在Hibernate中編寫某種自定義序列化器和反序列化器(不知道如何命名),以便我可以像通常的POJO一樣讀取這些類?
假設我已經創造了我希望堅持的課程。我無法更改它的代碼,即不能在其中添加任何註釋。此外,類不遵循bean約定。是否有可能在休眠中映射自定義的最終類?
I.e.它是任意複雜的類,我希望堅持下去。
是否有可能在Hibernate中編寫某種自定義序列化器和反序列化器(不知道如何命名),以便我可以像通常的POJO一樣讀取這些類?
你好,第一個問題是我可以映射一個「fina類」這個問題的答案是YES,只要你不使用Hibernate Enchancing或某種儀器。
現在第二個問題。 Bean不遵循豆約定。我想這意味着沒有獲得者和制定者。你可以有屬性級別訪問,所以這再次不是一個問題。
是否可以在Hibernate中編寫自定義串行器。這裏的答案是NO。爲什麼?因爲Hibernate不是關於序列化的,hibernate是關於SQL的。沒有嚴格的要求Hibernate實體應該可序列化。
即使Hibernate不強制序列化。即使它沒有實現Serializable或Eternalizeable,我仍然可以讓我的最終類可序列化。是的,你需要將它包裝到實現Serializable或Externalizeable的類中,並且自己實現doRead doWrite方法。
序列化爲JSON或XML - 這不是Hibernate的一部分,既不是JPA的一部分。這兩種格式的序列化被定義爲Jaxb和Jax-rs規範的一部分。
看起來我們有誤解。以JSON和XML爲例,我們可以編寫自定義類來讀取和寫入結構化數據。在hibernate中類似的會很好:從/向數據庫表讀寫自定義類。 – Dims
看一看休眠UserType
和CompositeUserType
,與衆所周知的EnumUserType example
枚舉有點像你的需求:final
類,沒有干將也沒有setter方法。但它們並不複雜,因此您可能需要一個CompositeUserType
,它允許爲一個類型映射多個列,而不是UserType
。
那麼你可以使用它一樣,在你的類:
public class MyClass {
@Id
private Long id;
@Type(type = "com...MyCompositeUserType")
private ComplexFinalClassNotPojo complexObject;
}
是實現序列化的最終類? –
@PaulWasilewski,因爲你想序列化它的blob,然後沒有:) – Dims
然後我想剩下的唯一選擇是映射類。 –