9

我正在为一个项目在 Hibernate 中创建一个自定义 UserType。在我使用 isMutable 方法之前,它一直相对简单。我试图弄清楚这种方法在合同方面意味着什么。

这是否意味着我正在为其创建 UserType 的类是不可变的,还是意味着持有对此类实例的引用的对象永远不会指向不同的实例?

我在Hibernate Community Wiki中找到了一些返回 true 的示例,因为对象本身是可变的 - http://www.hibernate.org/73.html

社区 wiki 中的其他示例返回 false 并没有说明原因,即使它们也是可变的。

我检查了JavaDoc,但也不是很清楚。

来自UserType的 JavaDoc :

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
4

2 回答 2

11

Hibernate will treat types marked as "mutable" as though they could change (i.e. require an UPDATE) without pointing to a new reference. If you assign a new reference to a Hibernate-loaded property Hibernate will recognize this even if the type is immutable - this happens all the time with, for instance, String fields. But if, say, you have a StringBuilder field and you mark it as immutable Hibernate will not notice if you modify the StringBuilder.

See this blog post for more details and a sample project.

于 2009-11-23T13:13:28.930 回答
2

这里的典型示例是 String 类 - 它是不可变的,即一旦创建了字符串,您就无法更改其内容或状态,如果您愿意,您将不得不将其处理成一个新副本。

isMutable 返回 true 意味着您说这个对象可以通过外部对象更改其状态,返回 false 意味着您必须将此对象复制到一个新实例,以便在此过程中对状态进行更改。或者正如您所说:“这是否意味着持有对此类实例的引用的对象永远不会指向不同的实例”。

于 2008-10-22T08:31:37.010 回答