网上说动态更新字段大致分为两步:
- 添加@DynamicUpdate(true)注解;
- 使用session为我们提供的merge方法
,具体可以看这篇博客:
一开始我没有使用merge()来更新字段,而是直接用Update()方法来更新,所以失败了,而merge方法是先查询数据库里的所以字段,然后与对应的实体类比较哪个字段有更新,然后再动态生成sql语句来更新对应的字段,但我调用这个方法之后控制台输出如下信息,其中实体类里面只有userName的值与数据库中的不同,可以看出merge的执行流程就是这样的
Hibernate:
select
user0_.userid as userid1_0_0_,
user0_.activationCode as activati2_0_0_,
user0_.address as address3_0_0_,
user0_.email as email4_0_0_,
user0_.headPhoto as headPhot5_0_0_,
user0_.password as password6_0_0_,
user0_.phone as phone7_0_0_,
user0_.realName as realName8_0_0_,
user0_.state as state9_0_0_,
user0_.userName as userNam10_0_0_
from
user user0_
where
user0_.userid=?
Hibernate:
update
user
set
userName=?
where
userid=?
这样就是实现了动态更新字段