1. 保存数据 Id 在数据库中是自增长的
2. entity中是:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
3. dao里面的方法:
@Repository
public interface SaveFormDao extends BaseJpaRepository<SaveForm> {
}
4. service中直接保存:直接调用Spring的 saveAndFlush方法保存数据
@Service
@Slf4j
public class saveFormService {
@Autowired
private SaveFormDao saveFormDao ;
/**
* 保存
* @param saveForm
*/
public AasApplyForm saveApplyForm(SaveForm SaveForm ){
return saveFormDao .saveAndFlush(applyForm);
}
}
5. Controller中:
@RestController
@RequestMapping("/save")
@Slf4j
public class saveFormController {
@Autowired
SaveFromService saveFormService ;
@PostMapping("/testSaveForm")
public ResponseMessage testSaveForm(@RequestBody SaveForm form) {
try{
SaveForm res = saveFormService.saveApplyForm(form);
return ResponseMessage.ok(res);
}catch (Exception e){
log.error("###########异常");
log.error(e.getMessage(), e);
log.error("################################");
e.printStackTrace();
}
return ResponseMessage.ok("");
}
}
测试结果:
1. 请求中指定了id, 和version 但是数据库中没有这条记录,则会用数据中新的ID,生成新的记录,version还是用指定的version:
2. 请求中指定了id, 和version 但是数据库中有这条记录,结果会更新
数据库中version也会更新:
2. 请求中指定了id, 和version 但是数据库中有这条记录,但是version不正确(和数据库不一致)
代码会抛出异常
optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [comXXXX.entity.SaveForm#2654]
4. 请求中不指定了id, 和version ,数据库中会新增一条记录,并且version是0