【发布时间】:2010-12-08 02:32:40
【问题描述】:
如果有的话,两者有什么区别?
应该在一个实体上使用一个或两个?
【问题讨论】:
标签: java hibernate jpa entity immutability
如果有的话,两者有什么区别?
应该在一个实体上使用一个或两个?
【问题讨论】:
标签: java hibernate jpa entity immutability
entity 几乎没有区别。 @Immutable 获得优先权(也就是说,如果您的实体同时被注释为 @Immutable 和 @Entity(mutable = "true"),它将被视为不可变)。
@Immutable 也可以用于具有几乎相同语义的集合。详情here
【讨论】:
@immutable 也适用于集合)。
EntityBindersource cmets 描述了上面提到的优先级。
org.hibernate.annotations.Entity 注释已被弃用,并将在 Hibernate 的未来版本中删除。
因此,如果您有不应被 Hibernate 修改的实体,则应始终使用 @Immutabale 注释。
@Immutable 注释告诉 Hibernate 以只读模式加载实体,因此脏检查机制无法跟踪实体修改。
但是,@Immutable 实体仍然可以通过JPQL 或Criteria API 批量更新查询进行更新。
为了确保 @Immutabale 实体永远不会针对批量更新查询进行修改,从 Hibernate 5.2.17 开始,您可以设置以下配置属性:
<property
name="hibernate.query.immutable_entity_update_query_handling_mode"
value="exception"
/>
有了这个属性,批量更新查询最终会抛出异常,实体更新将被阻止。
【讨论】: