【发布时间】:2020-01-20 03:33:40
【问题描述】:
我有一个包含大约 70 列的实体类。该表可能有大约 200,000 行。我只想更新所有 200,000 条记录中的一列。
通常我会检索所有实体,并且对于每个实体,使用字段的新值更新实体并保存它。
HQL 看起来像这样:select p from Person p。这允许我们编写 Java 代码,例如:entity.PhoneNumber = new_value; session.flush();。问题是 SELECT 将检索所有 70 列,而只需要 2 列(主键和要更改的字段)。
我们可以这样编写 HQL:select p.Id, p.PhoneNumber from Person p。不幸的是,现在我们不再获取实体,所以现在我们不再以面向对象的方式编程,而是坚持编写 HQL:update Person set p.PhoneNumber = ? where Id = ?。
有没有办法加载 PARTIAL 实体(加载一个只填充部分字段的实体,然后使用该对象进行更改然后保存?
【问题讨论】:
标签: hibernate