我在Hibernate中为项目创建自定义UserType.在我找到isMutable方法之前,它一直相对简单.我试图找出这种方法的含义,合同方式.
这是否意味着我创建UserType的类是不可变的,或者它是否意味着持有对此类的实例的引用的对象永远不会指向不同的实例?
我在Hibernate Community Wiki中找到了一些它们返回true的例子,因为对象本身是可变的 - http://www.hibernate.org/73.html.
社区维基中的其他示例返回false而没有解决原因,即使它们也是可变的.
我检查了JavaDoc,但它也不是很清楚.
从JavaDoc for UserType:
public boolean isMutable() Are objects of this type mutable? Returns: boolean
从JavaDoc for 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
Andrew Phill.. 10
Hibernate会将标记为"可变"的类型视为可以更改(即需要更新)而不指向新引用.如果为Hibernate加载的属性分配一个新引用,即使类型是不可变的,Hibernate也会识别它 - 这种情况一直发生在例如String字段中.但是,如果你有一个StringBuilder字段并且你把它标记为不可变 Hibernate将不会注意到你是否修改了StringBuilder.
有关更多详细信息和示例项目,请参阅此博客文章.
Hibernate会将标记为"可变"的类型视为可以更改(即需要更新)而不指向新引用.如果为Hibernate加载的属性分配一个新引用,即使类型是不可变的,Hibernate也会识别它 - 这种情况一直发生在例如String字段中.但是,如果你有一个StringBuilder字段并且你把它标记为不可变 Hibernate将不会注意到你是否修改了StringBuilder.
有关更多详细信息和示例项目,请参阅此博客文章.