Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate时@Immutable和@Entity(mutable=false)之间有什么区别_Java_Hibernate_Jpa_Entity_Immutability - Fatal编程技术网

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冠军,当之无愧。非常感谢你