Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
更新JPA Hibernate实体而不从数据库中选择它_Hibernate_Select_Jpa_Lazy Evaluation - Fatal编程技术网

更新JPA Hibernate实体而不从数据库中选择它

更新JPA Hibernate实体而不从数据库中选择它,hibernate,select,jpa,lazy-evaluation,Hibernate,Select,Jpa,Lazy Evaluation,我有一个名为Execution的hibernate实体。它在我的流程开始时创建,并在结束时更新,指示它是如何完成的 我想更新此实体的单个属性,而不会导致数据库中出现select Execution Execution=entityManager.getReference(Execution.class,executionId) execution.setStatus(Status.FINISHED)/-->调用此方法将在我的数据库中激发SELECT。我不希望它发生,我只想更新我的实体 这不是此方

我有一个名为Execution的hibernate实体。它在我的流程开始时创建,并在结束时更新,指示它是如何完成的

我想更新此实体的单个属性,而不会导致数据库中出现select

Execution Execution=entityManager.getReference(Execution.class,executionId)
execution.setStatus(Status.FINISHED)/-->调用此方法将在我的数据库中激发SELECT。我不希望它发生,我只想更新我的实体

这不是此方法特有的,任何其他名为SELECT子句的方法都会产生SELECT子句。事实上,select似乎在调用我的方法之前就已经发生了。我的印象是,hibernate代理在我的类no args构造函数中放入了一些代码,以便在每次调用任何方法时触发select


是否可以在我的数据库中不触发SELECT语句的情况下更新JPA/Hibernate实体?

Hibernate就是这样工作的。每当访问任何非id属性时,其代理对象都会从DB加载真实对象

尝试在流程开始时保存/加载对象(执行
选择
),并确保每次触摸对象时会话不会自动刷新(我认为默认行为不是自动刷新,但值得检查)


或者,您也可以在处理过程中尝试从Hibernate会话中分离对象。

我接受这个正确答案。通过使用JPA-QL批量更新/Insert@user266391,我发现了一个更简单的解决方案。我对JPA不熟悉,所以感谢链接:-)