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执行?
答案 0 :(得分:1)
不,默认情况下这不是等于。但是可以用Hibernate做到这一点,它被称为动态更新。您可以通过DynamicUpdate注释或Entity注释的属性启用它(注意:它已被弃用)
但在这两种情况下,都有一些限制,比如你必须首先获取你的实体。
您可以在互联网上找到一些示例,here就是其中之一。这里有一个related article和一个关于动态更新性能的SO question。