Hibernate @DynamicUpdate

时间:2018-06-13 07:30:27

标签: java mysql hibernate

我们有一张桌子说'A'在我们的系统中有大约120列(我知道表没有规范化,表规范化作为我们路线图中的积压项存在)。

目前,我们遇到一个问题,即更新同一个表行时多个线程会覆盖一些现有的更新列。我们的表实体上没有动态更新注释。

我正在考虑在表上添加该注释,因为这可以解决我们的问题,因为不同的线程在表的不同列上工作,如果在运行时生成sql只更新那些列,那么它将不会覆盖任何更新完成在其他列上由不同的线程。

但是我读到了hibernate缓存插入,更新了包含所有列的表的sql以防动态更新不存在。

那么,使用@DynamicUpdate在这里实际上是否有用,或者在运行时生成动态sql的成本会导致性能下降?

有问题的表有数百万条记录,每隔一秒就会发生插入或更新(更新更频繁)。

1 个答案:

答案 0 :(得分:0)

我一定会向您推荐@DynamicUpdate。让我解释一下原因:

a)数据库性能:通过降低要更新的列数,可以减少数据库服务器开销,以检查参照完整性&每列的约束(主键,外键,唯一键,非空等),以及更新包含更新列的相应索引。

b)你只是每次都在重建缓存的查询计划,但是对于多线程环境,请记住它不会产生差异,因为缓存的查询计划只有在给定的会话生命周期才有效,因此只对连续的udpates有用相同的数据库会话。