如果有的话,两者有什么区别?
一个实体应该使用其中之一还是两者都使用?
对于实体来说几乎没有区别。
@Immutable
获得优先级(也就是说,如果您有同时注释为 @Immutable
和 @Entity(mutable = "true")
的实体,它将被视为不可变)。
@Immutable
也可以用于具有几乎相同语义的集合。详情请看这里
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"
/>
设置此属性后,批量更新查询最终将引发异常,并且实体更新将被阻止。