如果有的话,两者有什么区别?
应该在一个实体上使用一个或两个?
对于实体,几乎没有区别。@Immutable
获得优先权(也就是说,如果您有被注释为的实体,@Immutable
并且@Entity(mutable = "true")
它将被视为不可变的)。
@Immutable
也可以用于具有几乎相同语义的集合。详情在这里
该org.hibernate.annotations.Entity
注释已弃用,并将在 Hibernate 的未来版本中删除。
因此,@Immutabale
如果您有不应被 Hibernate 修改的实体,则应始终使用注释。
注释告诉 Hibernate以@Immutable
只读模式加载实体,因此脏检查机制无法跟踪实体修改。
但是,@Immutable
实体仍然可以通过JPQL
或Criteria API
批量更新查询进行更新。
为了确保@Immutabale
从不修改实体以进行批量更新查询,从 Hibernate 5.2.17 开始,您可以设置以下配置属性:
<property
name="hibernate.query.immutable_entity_update_query_handling_mode"
value="exception"
/>
有了这个属性,批量更新查询将最终抛出异常,实体更新将被阻止。