【发布时间】:2021-07-01 06:53:51
【问题描述】:
我正在使用 Hibernate,并且(作为示例)一个具有 10000 个条目的 Employee 实体。假设其中 1000 人的薪水为 4000,我想将其增加到 5000。我很难找到有效的方法来做到这一点。
通过获取所有员工并更新相关条目在代码中执行此操作似乎无效、缓慢,并且在某些情况下似乎还会导致“批量更新从更新返回意外的行数”错误。
因此,建议here 使用本机查询似乎更好,但随后您需要更新 Hibernate 缓存以查看下一个请求的更改:
Employee e = em.find(Employee.class, <id ???>);
em.flush();
em.detach(e);
em.createNativeQuery("UPDATE employee SET salery = 5000 where salery = 4000")
.executeUpdate();
但是,我不明白如何在发出本机更新查询之前分离实体。 em.find 调用的第二个参数似乎是单个实体的 id?但是Emloyees 在整个应用程序中都使用了,所以我应该如何知道要分离哪些?有没有办法分离所有(例如像 em.detachAll(Employee.class))或者我应该在一个循环中迭代所有 1000 个雇员并单独分离它们?
我也愿意接受其他解决我最初问题的解决方案。
【问题讨论】:
标签: sql hibernate bulk hibernate-native-query