25

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

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

4

2 回答 2

24

对于实体,几乎没有区别。@Immutable获得优先权(也就是说,如果您有被注释为的实体,@Immutable并且@Entity(mutable = "true")它将被视为不可变的)。

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

于 2009-10-19T20:49:42.657 回答
22

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

因此,@Immutabale如果您有不应被 Hibernate 修改的实体,则应始终使用注释。

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

但是,@Immutable实体仍然可以通过JPQLCriteria API批量更新查询进行更新。

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

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

有了这个属性,批量更新查询将最终抛出异常,实体更新将被阻止。

于 2018-04-04T12:57:55.050 回答