2008-10-22 21 views
8

我創建了一個項目,在Hibernate中自定義的用戶類型。直到我接觸到isMutable方法時,它一直比較簡單。我試圖找出這種方法意味着什麼,合同明智。創建一個定製的Hibernate UserType - isMutable()是什麼意思?

這是否意味着我創建的用戶類型爲不可變還是意味着持有這一類絕不會指向不同的實例的實例的引用對象的類?

我在Hibernate Community Wiki中發現了一些例子,它們返回true,因爲對象本身是可變的 - http://www.hibernate.org/73.html

在社區維基其他例子不解決,爲什麼返回false,儘管他們也是可變的。

我檢查的JavaDoc,但無論是不是很清楚。

從JavaDoc中UserType

public boolean isMutable() 
    Are objects of this type mutable? 
    Returns: 
     boolean 

從JavaDoc中Type

public boolean isMutable() 
    Are objects of this type mutable. (With respect to the referencing 
    object ... entities and collections are considered immutable because 
    they manage their own internal state.) 
    Returns: 
     boolean 
+1

鏈接不再有效fyi – Jackie 2014-05-21 17:34:42

回答

9

Hibernate會將標記爲「可變」的類型視爲可以改變(即需要更新)而不指定指向新的引用。如果您分配一個新的參考Hibernate的加載性能Hibernate會認識到這一點,即使類型是不可變的 - 這一切發生的時間,例如,字符串字段。 但是,如果你說有一個StringBuilder字段,並且你將其標記爲不可變如果修改StringBuilder,休眠將會而不是通知。

的更多細節和示例項目見this blog post

2

這裏最典型的例子是String類 - 這是不變的,即一旦創建了字符串,你不能改變它的內容或狀態,如果你想要,那麼你將不得不把它處理成一個新的副本。

isMutable返回true意味着你說這個對象可以通過外部對象改變它的狀態,返回false意味着你將不得不將這個對象複製到一個新的實例上,使得改變一直沿着狀態變化。或者如您所說:「是否意味着持有對此類實例的引用的對象將永遠不會指向不同的實例」。

+2

在JavaDoc for Type.isMutable()中,他們說要將數組標記爲不可變。但是這似乎與你所說的相矛盾,因爲數組可以通過外部對象改變它們的狀態。 – 2008-10-22 15:35:31