Java 使用Hibernate时@Immutable和@Entity(mutable=false)之间有什么区别
如果有的话,两者之间有什么区别Java 使用Hibernate时@Immutable和@Entity(mutable=false)之间有什么区别,java,hibernate,jpa,entity,immutability,Java,Hibernate,Jpa,Entity,Immutability,如果有的话,两者之间有什么区别 一个实体应该使用一个或两个吗?对于实体几乎没有区别@Immutable获得优先级(即如果您的实体同时被注释为@Immutable和@entity(mutable=“true”)它将被视为不可变) @Immutable也可以在语义几乎相同的集合上使用。详细信息是org.hibernate.annotations.Entity注释已被弃用,将在未来的hibernate版本中删除 因此,如果您有永远不应该由Hibernate修改的实体,则应该始终使用注释 @Immuta
一个实体应该使用一个或两个吗?对于实体几乎没有区别
@Immutable
获得优先级(即如果您的实体同时被注释为@Immutable
和@entity(mutable=“true”)
它将被视为不可变)
@Immutable
也可以在语义几乎相同的集合上使用。详细信息是org.hibernate.annotations.Entity
注释已被弃用,将在未来的hibernate版本中删除
因此,如果您有永远不应该由Hibernate修改的实体,则应该始终使用注释
@Immutable
注释告诉Hibernate以只读模式加载实体,因此脏检查机制无法跟踪实体修改
但是,@Immutable
实体仍然可以通过JPQL
或批量更新查询进行更新
为了确保从Hibernate 5.2.17开始,不会为批量更新查询修改@Immutabale
实体,您可以设置以下配置属性:
<property
name="hibernate.query.immutable_entity_update_query_handling_mode"
value="exception"
/>
使用此属性后,批量更新查询将引发异常,实体更新将被阻止。是的,我有一份相同文档的打印件,但它没有区分2,只是说明它们是什么以及它们可以做什么,在这种情况下,它们对实体都做相同的事情(由于
@immutable
也适用于集合)。它没有很好的文档记录,没有。EntityBinder
源注释描述了上述优先级。嗨@Vlad Mihalcea-我想我知道答案,但是有没有办法在定期更新@immutable时引发异常?(而不是忽略更新)这是一个好主意。你应该为它打开一个Jira问题,并提供一个带修复程序的拉取请求。我不再为Red Hat工作,所以我无法帮助你。谢谢@Vlad Mihalcea。顺便说一句,祝贺你成为Java冠军,当之无愧。非常感谢你