1

hibernate sessionload方法用于在不加载整个对象的情况下检索代理,这通常在需要链接父实体和子实体时使用。但是更新代理呢?例如:

 MyEntity entity = session.load(MyEntity.class, 1l);
 entity.setName("newName");
 session.saveOrUpdate(entity);

这里预计只有name实体的列将被更新,id=1l而不加载整个实体。这是真的吗?这段代码是否等于sql执行UPDATE MyEntity SET name = 'newName' where id = 1

4

1 回答 1

1

不,默认情况下这是不等于的。但是它可以用 Hibernate 来实现,它被称为动态更新。您可以通过DynamicUpdate注释或实体注释的属性启用它(注意:它已弃用)

但是在这两种情况下,都有一些限制,比如你必须先获取你的实体。

您可以在 Internet 上找到许多示例,这里是其中之一。这里是一篇相关文章和一篇关于动态更新性能的SO问题。

于 2016-07-01T04:30:46.413 回答