Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建自定义Hibernate用户类型-isMutable()是什么意思?_Java_Hibernate_Orm - Fatal编程技术网

Java 创建自定义Hibernate用户类型-isMutable()是什么意思?

Java 创建自定义Hibernate用户类型-isMutable()是什么意思?,java,hibernate,orm,Java,Hibernate,Orm,我正在Hibernate中为一个项目创建一个自定义用户类型。在我使用isMutable方法之前,它一直比较简单。我正试图弄明白这种方法的意义,合同方面的 这是否意味着我正在为其创建UserType的类是不可变的,还是意味着持有对该类实例的引用的对象永远不会指向其他实例 我在中找到了一些返回true的示例,因为对象本身是可变的- 社区wiki中的其他示例返回false,但没有说明原因,即使它们也是可变的 我已经检查了JavaDoc,但也不是很清楚 从JavaDoc获取: 从JavaDoc获取: 这

我正在Hibernate中为一个项目创建一个自定义用户类型。在我使用isMutable方法之前,它一直比较简单。我正试图弄明白这种方法的意义,合同方面的

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

我在中找到了一些返回true的示例,因为对象本身是可变的-

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

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

从JavaDoc获取:

从JavaDoc获取:


这里的典型示例是String类,它是不可变的,即一旦创建了字符串,就不能更改其内容或状态,如果要更改,就必须将其处理为新的副本


isMutable返回true表示此对象的状态可以被外部对象更改,返回false表示您必须将此对象复制到一个新实例,并将更改传递到状态。或者正如您所说:“这是否意味着持有此类实例引用的对象永远不会指向其他实例。”

Hibernate将把标记为“可变”的类型视为可以更改(即需要更新)而不指向新引用。如果您为Hibernate加载的属性分配了一个新的引用,Hibernate将识别出这一点,即使该类型是不可变的——例如,在字符串字段中,这种情况随时都会发生。 但是,如果您有一个StringBuilder字段,并且将其标记为不可变,那么如果您修改StringBuilder,Hibernate将不会注意到


有关更多详细信息和示例项目,请参阅。

在JavaDoc for Type.isMutable()中,他们说要将数组标记为不可变。但这似乎与您所说的相矛盾,因为数组的状态可能会被外部对象更改。仅供参考,链接不再有效
public boolean isMutable()
    Are objects of this type mutable?
    Returns:
        boolean
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