相关疑难解决方法(0)

dynamic-update = true如何在hibernate内部工作?

所以我理解dynamic-update = true这个属性的设置是什么,即它只考虑那些被修改的字段,并省略了为其他字段设置空值的工作.节省开销,提高性能.

出于好奇心问:hibernate如何知道所有字段都被修改了?在触发更新查询之前,它是否首先将select查询生成的结果与数据库进行比较?假设是,那么不是比较性能的开销吗?

如我错了请纠正我.提前致谢!

hibernate

18
推荐指数
2
解决办法
1万
查看次数

JpaRepository getOne() 获取并更新整个对象

我试图模仿这个已接受的答案 /sf/answers/2782285201/在仅更新某些对象的字段时使用 Hibernate 代理。我的代码如下所示:

  @Transactional
public void updateStudentYear(int uniqueNumber, int newYear) {
    Student studentProxy = studentRepository.getOne(uniqueNumber);
    studentProxy.setYear(newYear);
    studentRepository.save(studentProxy);
}
Run Code Online (Sandbox Code Playgroud)

问题在于 Hibernate 既执行完全选择又执行完全更新。这是日志:

2021-03-10 20:24:23.240 DEBUG 118757 --- [ main] org.hibernate.SQL :从学生中选择student0_.unique_number作为unique_n1_1_0_,student0_.name作为name2_1_0_,student0_.team作为team3_1_0_,student0_.year作为year4_1_0_ Student0_ 其中student0_.unique_number=?

2021-03-10 20:24:23.268 DEBUG 118757 --- [ main] org.hibernate.SQL : 更新学生集 name=?, team=?,year=? 其中 unique_number=?

我原以为只会发出一个“更新年份”语句,但令我惊讶的是,看起来一切都是像经典的 findOne()/save() 对操作一样完成的。我错了吗?

java proxy spring hibernate spring-data-jpa

5
推荐指数
1
解决办法
372
查看次数

标签 统计

hibernate ×2

java ×1

proxy ×1

spring ×1

spring-data-jpa ×1