我有以下方法-
@Transactional public void savethis(){ EntityObject t = entityManagerTreasury.getReference(EntityObject.class, 1); t.setAction("abc"); }
现在,符合以下答案-https: //stackoverflow.com/a/1608621/4881766
我应该只能在sql日志中看到更新查询。
但是,我观察到的行为如下-
我期望的行为是,如果我在代理上使用任何getter,则应该发出选择,但是当仅使用setter时,我希望更改在方法的最后通过更新进行提交,而没有选择发行。
事实证明,无论我对代理对象,getter或setter做什么,它都会发出一个select。
我想更新给定ID的实体的选定字段。如果有任何方式可以更新我想要的任何字段而无需编写jpql或本机查询,我将非常感激。
提前致谢!
从EntityManager.getReference()文档中:
获取一个实例,其状态可能会延迟获取。
因此,在entityManagerTreasury.getReference没有选择发出之后。
entityManagerTreasury.getReference
仅在之后t.setAction("abc"),如果尚未获取实体状态,则发出选择以获取状态。
t.setAction("abc")
关键是: 除非获取实体状态,否则实体管理器无法保存实体的状态 。因此,除非您使用JPQL,否则您 不能 跳过先前的选择。