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);
浙公网安备 33010602011771号