我可以通过hibenrate Session.load更新或设置一个实体字段而无需加载整个对象吗?

时间:2016-07-01 04:05:30

标签: java sql hibernate hibernate-session

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

您可以在互联网上找到一些示例,here就是其中之一。这里有一个related article和一个关于动态更新性能的SO question