一、问题描述
使用Jpa时我们经常需要对数据库中的数据进行更新操作,通常更新数据库的数据有两种方法。
第一种是通过Jpa的实体管理器对托管态实体对象进行更新,对托管态实体对象的更新即意味着对数据库对应记录的更新。这种方法虽然使用起来比较简单,但也存在全字段更新、意料之外的记录更新、业务层跟持久层职责不清等问题。示例如下:
@Override
@Transactional(value = "demo2TransactionManager",rollbackFor = CustomException.class)
public void save6(UserInfo userInfo) throws CustomException {
UserInfo userInfo1 = this.userInfoRepository.findById(userInfo.getOid()).get();
userInfo1.setState(1);
userInfo1.setUserInfoDesc("使用实体管理器对托管态用户信息进行更新");
}
第二种就是通过写本地Sql的方式来实现数据库记录的更新,这种方虽然使用起来比较直观,但更新时往往会传入一个参数列表,以确定要更新的字段以及更新的条件。如下所示:
//更新用户信息表的状态和描述(使用参数列表)
@Query(value = "update user