使用Hibernate时@Immutable和@Entity(mutable = false)之间有什么不同

时间:2009-10-19 18:53:01

标签: java hibernate jpa entity immutability

两者之间有什么区别?

是否应在实体上使用一个或两个?

2 个答案:

答案 0 :(得分:18)

对于实体,实际上没有区别。 @Immutable获得优先权(即如果您将实体注释为@Immutable@Entity(mutable = "true"),则它将被视为不可变的。)

@Immutable也可用于具有几乎相同语义的集合。详细信息为here

答案 1 :(得分:8)

{@ 1}}注释已弃用,将在以后的Hibernate版本中删除。

因此,如果您的实体永远不会被Hibernate修改,则应始终使用org.hibernate.annotations.Entity注释。

正如我在this article中所解释的那样,@Immutabale注释告诉Hibernate以只读模式加载实体,因此dirty checking mechanism无法跟踪实体修改。

但是,@Immutable实体仍然可以通过JPQL或Criteria API bulk update queries进行更新。

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

@Immutabale

使用此属性后,批量更新查询将最终抛出异常,并且将阻止实体更新。