O /
我在Gradle w / JPA上使用Spring Boot
我有以下对象:{"id":123,"year":"123","name":"Xxxx","userKey": XXXXX}
我将只发布“name”和“year”,MySQL Trigger将在插入数据之前生成“userKey”。
当我调用rep.saveAndFlush(object)
时,我将使用userKey将新对象返回给用户。
但它没有发生! :/
当我发送POST { "name" : "Teste" , "year" : 30}
时
系统返回{"id":37,"year":"30","name":"Teste","userKey":null}
如果我尝试将ID作为参数传递,则返回{"id":37,"year":"30","name":"Teste","userKey":"VVUR"}
为什么?
如何使用完整数据返回对象?
我试过了:
testeRepository.saveAndFlush(teste);
return new ResponseEntity<> (teste, HttpStatus.CREATED);
&安培;
testeRepository.saveAndFlush(teste);
testeRepository.flush(teste);
return new ResponseEntity<> (teste, HttpStatus.CREATED);
&安培;
testeRepository.saveAndFlush(teste);
testeRepository.flush(teste);
teste = testeRepository.findOne(teste.getId()); /* Same as GET */
return new ResponseEntity<> (teste, HttpStatus.CREATED);
所以..还没有工作! :(只需返回userKey上的ID和Null!
答案 0 :(得分:1)
使用triggle,托管对象的数据将不会与数据库中的实际数据同步(如批量更新或批量删除)。 您可以刷新对象或清除框架的第一级缓存。
对于Spring,我不确定解决方案,但可能您可以使用@CacheEvict和@Cacheable来解决问题。 例如:
@CacheEvict(value = "teste", allEntries = true)
public void resetAllEntries() {
// Intentionally blank
}
@Cacheable(value="teste")
public Teste update(Teste teste){
return rep.saveAndFlush(teste);
}
,过程将是:
teste = update(teste);
resetAllEntries();
teste = findById(teste.getId());
希望这会有所帮助!