我有一个模型:
public class ABC implements Serializable {
private int baseId;
private Integer aId;
private Integer bId;
private Boolean isReal;
private TimeStamp updateTime;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "base_id", nullable = false)
public int getBaseId() {
return baseId;
}
public void setBaseId(int baseId) {
this.baseId = baseId;
}
@Basic
@Column(name = "a_id", nullable = false)
public Integer getAId() {
return aId;
}
public void setAId(Integer aId) {
this.aId = aId;
}
@Basic
@Column(name = "b_id", nullable = false)
public Integer getBId() {
return bId;
}
public void setBId(Integer bId) {
this.bId = bId;
}
@Basic
@Column(name = "is_real")
public Boolean getIsReal() {
return isReal;
}
public void setIsReal(Boolean isReal) {
this.isReal = isReal;
}
@Basic
@Column(name ="update_time")
public Timestamp getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Timestamp updateTime) {
this.updateTime = updateTime;
}
}
我有一个 Controller 类:
@RestController
@RequestMapping(path = "${serverconfig.api-base-path}/base")
public class BaseController {
/**
* Instance of an logger
*/
private static final Logger LOG =
LoggerFactory.getLogger(BaseController.class);
/**
* Base repository
*/
private BaseRepository baseRepository;
/***
*
* @param baseRepository
*/
public BaseController(BaseRepository baseRepository) {
LOG.trace("BaseRepository constructor method.");
this.baseRepository = baseRepository;
}
@PostMapping(path = Route.UPDATE_IS_REAL)
// @Transactional
public ABC updateIsReal(@Valid @RequestBody
@RequestParam("baseId") int baseId,
@RequestParam("isReal") boolean isReal){
ABC abc = baseRepository.findByBaseId(baseId);
Date date= new Date();
Timestamp ts = new Timestamp(date.getTime());
abc.setBaseId(baseId);
abc.setIsReal(isReal);
abc.setUpdateTime(ts);
return baseRepository.save(abc);
}
}
我的存储库类:
@Repository
public interface BaseRepository extends
JpaRepository<ABC, Integer> {
List<ABC> findByAId(Integer aId);
ABC findByBaseId(Integer baseId);
}
数据库表有一个条目:
"base_id": 1,
"a_Id": 1,
"b_Id": 1,
"is_real": null,
"update_time": null
当我调用端点时,它没有给出错误并返回:
"base_id": 1,
"aId": 1,
"bId": 1,
"isReal": yes,
"updateTime": 018-10-01T18:30:56.765+0000
但是当我查询数据库时,记录没有在那里更新。我不明白我做错了什么。当我尝试进行休息调用时,我正在提供 id,并且该 id 存在于数据库中。
最佳答案
与 save
,更改不需要立即刷新到数据库,并且可能只保留在内存中,直到发出刷新或提交命令。
与 saveAndFlush
,更改将立即刷新到数据库。
但是,如果您刷新事务中的更改并且不提交它们,则在此事务中提交之前,这些更改仍然不会对外部事务可见。
在您的 BaseController 中尝试更改
return baseRepository.save(abc);
到
return baseRepository.saveAndFlush(abc);
更多信息 here和 here
关于Spring Data JPA .save() 方法未保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52597229/