【发布时间】:2020-06-21 19:21:11
【问题描述】:
我最近致力于优化我的应用程序性能,我注意到当我延迟加载具有 MazyToOne 关系的依赖项时,hibernate 提供的对象不仅延迟加载对象本身,而且还延迟加载它的所有字段 - 所以,它让我想如果我可以利用它来发挥我的优势 让我们想象一下这样的情况
@Transactional
public void updateUserNameToHarry(Long userId){
User u = dao.findById(userId);
u.setName("Harry");
}
所以我们打开了一个事务,将 Harry 加载到我们的持久化上下文中,并更新了他的名字。 一旦事务关闭,Hibernate 将发挥它的魔力并更新我们拥有的用户实体的名称。 但是,在这种情况下,我真的不需要将 Harry db 行解析为实体图,将 Harry 加载到应用程序上下文中,而且我绝对不需要为 Harry 急切加载的关系执行所有这些操作。
所以问题来了——我能以某种方式避免这种情况吗? 理想情况下,我希望 Harry 成为一个延迟加载的对象,在调用 setName 方法时添加一个更新查询,该查询将在事务提交后执行。
我目前正在使用 Spring boot 2.0 堆栈,但我的问题适用于任何其他版本和使用 java 的 ORM 方法。
【问题讨论】:
标签: java hibernate spring-data-jpa spring-data