【问题标题】:Jpa does not update dataJpa 不更新数据
【发布时间】:2020-05-23 11:55:04
【问题描述】:

我在Controller中有一个方法:

 @RequestMapping(value = "/children", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    public void createChild(@RequestBody CreateChildRequestDTO childDTO) {
        Long guardianId = Long.parseLong(childDTO.getGuardianId());
        Child child = childDTO.getChild();
        Guardian guardian = guardianService.findById(guardianId).get();
        boolean isExist = childService.isExist(child.getChildFullName(),
                child.getPassword(),
                child.getPhoneNumber());
        if (isExist) {
            child = childService.findChildByNameAndPass(child.getChildFullName(), child.getPassword());
            guardian.addChild(child);
        }
        else {
            guardian.addChild(child);
            childService.createChild(child);
        }
    }

我还在Guradian 类中创建了多对多关系:

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "guardian_child", schema = "cheer",
        joinColumns = @JoinColumn(name = "guardianid"),
        inverseJoinColumns = @JoinColumn(name = "childid"))
private List<Child> children = new ArrayList<>();

当我运行代码并执行guardian.addChild(child) 行时,孩子被添加到监护人列表中,但没有在表中创建新记录。如何解决?提交对象关系的更改?

【问题讨论】:

  • 您永远不会保存更改
  • else 正在工作。并且新记录添加到 Guardian_child 表中
  • 我不明白这怎么可能?
  • 如果没有childService.createChild(child); 的代码,我不确定您希望如何回答。我猜是因为 childService 救了孩子??

标签: java spring spring-boot jpa spring-data


【解决方案1】:

正如@Jens 在评论中建议的那样,您永远不会将更改保存到数据库中。

有两种方法可以解决此问题:

  1. 您可以在事务中运行代码,然后 hibernate 将负责脏检查并将对父级的所有更改提交到数据库。
  2. 你可以通过在方法末尾调用类似的东西来保存guardian

    guardianService.save(guardian);
    

【讨论】:

  • @Krazim00da 代码正在运行且实体存在关系这一事实并不意味着它们已保存到数据库中
  • 我检查了数据库中的记录...else 之后有新记录。
  • @Krazim00da 那么你的问题是什么?
  • if(true) 中的相同代码不起作用。并且没有添加新记录
  • 我必须如何实现保存方法?
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 2019-05-27
  • 2020-03-22
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
相关资源
最近更新 更多