使用Hibernate时@Immutable和@Entity(mutable=false)有什么区别

问题描述 投票:0回答:2

如果有的话,两者有什么区别?

一个实体应该使用其中之一还是两者都使用?

java hibernate jpa entity immutability
2个回答
27
投票

对于实体来说几乎没有区别。

@Immutable
获得优先级(也就是说,如果您有同时注释为
@Immutable
@Entity(mutable = "true")
的实体,它将被视为不可变)。

@Immutable
也可以用于具有几乎相同语义的集合。详情请看这里


24
投票

org.hibernate.annotations.Entity
注释已弃用,并将在 Hibernate 的未来版本中删除。

因此,如果您有永远不应该被 Hibernate 修改的实体,您应该始终使用

@Immutable
注释。

@Immutable
注释告诉Hibernate以只读模式加载实体,因此脏检查机制无法跟踪实体修改。

但是,

@Immutable
实体仍然可以通过
JPQL
Criteria API
批量更新查询进行更新。

为了确保

@Immutable
实体永远不会被批量更新查询修改,从 Hibernate 5.2.17 开始,您可以设置以下配置属性:

<property
    name="hibernate.query.immutable_entity_update_query_handling_mode"
    value="exception"
/>

设置此属性后,批量更新查询最终将引发异常,并且实体更新将被阻止。

© www.soinside.com 2019 - 2024. All rights reserved.