Spring Data JPA .save() 方法未保存在数据库中

标签 spring spring-boot spring-data-jpa spring-data

我有一个模型:

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);

更多信息 herehere

关于Spring Data JPA .save() 方法未保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52597229/

相关文章:

java - 未识别 Apache Camel 路线

spring - CreateProcess error=2, 系统找不到指定Roo的文件

java - 属性访问异常 : IllegalArgumentException occurred while calling setter

java - 来自模拟 bean 的方法无法正常工作

spring-boot - 无法找到请求目标的有效证书路径 - Keycloak - Springboot - 自签名证书 - 测试

java - 在特定gradle任务上设置调试JVM args

hibernate - 如何查询复合主键的子集?

mysql - Spring Data JPA - 为类提供了错误类型的 id。应为 : class java. lang.Integer,得到类 java.lang.Long

java - Spring 数据 JPA 查询行为异常

spring - 如何强制 Angular cli 从绝对位置而不是 base-href 提供包文件