最近在一次采访中,我被问到什么是更新列而不是完整表的优化方法。例如 - 如果我有一个用户表并且该表具有列状态,那么现在如果想要仅更新状态列而不是完整表。那么在hibernate中完成这项工作的优化方法是什么。
答案 0 :(得分:2)
使用update query,就像使用SQL一样。文档中的示例:
String hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName";
// or String hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
.setString( "newName", newName )
.setString( "oldName", oldName )
.executeUpdate();
但是应该小心使用它,因为它绕过了第一级缓存。这意味着此查询中已经加载到会话中的实体更新将不会知道更新,并且仍将具有旧名称。
Hibernate也可以配置为仅更新自实体加载以来已更改的字段,但这通常会适得其反。