jpa实现插入和更新操作(字段有值就更新,没值就用原来的)

 1 @Data
 2     @Entity
 3     @Table(name = "kp_customers")
 4     public class Customers {
 5 
 6         @Id
 7         //插入时候因为主键自增,导致不能丝滑插入,需要在实体类的头上加上如下注解,完成愉快的插入。
 8         @GeneratedValue(strategy = GenerationType.IDENTITY)
 9         @Column(name = "id")
10         private long id;
11 
12         @Column(name = "manager_id")
13         private long managerId;
14     }
 1 @Transactional
 2     @Override
 3     public int updateLove(LoveParam param) {
 4         if (param.getManageId() == 0 || param.getProjectId() == 0) throw new ArithmeticException("缺少必要参数");
 5 
 6         Optional<makeLove> optional = LoveRepository.findById(param.getLoveId());
 7         if (!optional.isPresent()) {
 8             makeLove makeLove = new makeLove();
 9             makeLove.setProjectId(param.getProjectId());
10             makeLove.setLoveName(param.getName());
11             makeLove.setLovePhone(param.getPhone());
12             makeLove.setAddTime(new Timestamp(System.currentTimeMillis()));
13             LoveRepository.saveAndFlush(makeLove);
14         } else {
15             LoveRepository.updataLoveById(param);
16         }
17         return 520;
18     }

这一段jpa的更新操作之所以能令妙龄少女春心荡漾,余味绕梁,柔情似水,千姿百魅,妙就妙在其字段有就更新,没有就不更新.
而saveandflush虽然也可以插入更新两用,但是在字段没有的情况下就会更新为空,破坏了之前的原有字段!

 1 @Modifying
 2     @Transactional
 3     @Query("update Loves u set " +
 4             "u.managerId = CASE WHEN :#{#param.manageId} IS NULL THEN u.managerId ELSE :#{#param.manageId} END ," +
 5             "u.projectId = CASE WHEN :#{#param.projectId} IS NULL THEN u.projectId ELSE :#{#param.projectId} END ," +
 6             "u.idCard = CASE WHEN :#{#param.idCard} IS NULL THEN u.idCard ELSE :#{#param.idCard} END ," +
 7             "u.LoveName = CASE WHEN :#{#param.name} IS NULL THEN u.LoveName ELSE :#{#param.name} END ," +
 8             "u.LovePhone = CASE WHEN :#{#param.phone} IS NULL THEN u.LovePhone ELSE :#{#param.phone} END ," +
 9             "u.LoveHouse = CASE WHEN :#{#param.houseNo} IS NULL THEN u.LoveHouse ELSE :#{#param.houseNo} END ," +
10             "u.intentionIndex = CASE WHEN :#{#param.intentionIndex} IS NULL THEN u.intentionIndex ELSE :#{#param.intentionIndex} END " +
11             "where u.id = :#{#param.LoveId}")
12     Integer updataLoveById(@Param("param") LoveParam param);

 

 

posted @ 2021-02-04 15:27  快乐的菜菜  阅读(2585)  评论(1)    收藏  举报