spring data jpa.save()方法未保存到数据库中

qkf9rpyu  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(1332)

我有一个模型:

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

我有一个控制器类:

@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

但是当我查询数据库时,记录不会在那里更新。我不明白我做错了什么。当我尝试进行rest调用时,我提供了一个id,并且该id存在于数据库中。

jvidinwx

jvidinwx1#

save ,在发出flush或commit命令之前,不需要立即将更改刷新到db,并且可能只保留在内存中。
saveAndFlush ,更改将立即刷新到数据库。
但是,如果刷新事务中的更改而不提交它们,则在该事务中提交之前,外部事务仍然看不到这些更改。
在basecontroller中尝试更改

return baseRepository.save(abc);

return baseRepository.saveAndFlush(abc);

更多信息请点击这里和这里

brtdzjyr

brtdzjyr2#

如果有人出于同样的原因来到这里,却没有找到答案……:
你有没有检查一下你有没有下列设备?也许整个模式可能正在被重新创建?
spring.jpa.hibernate.ddl auto=创建

相关问题