不正确的JPA实体列类型导致FindById

时间:2019-05-17 21:52:58

标签: spring jpa

我目前正在开发Spring后端应用程序。我们有一个Partner实体,该实体带有@GeneratedValue(strategy = GenerationType.IDENTITY注释,用于自动生成主键。主键partnerId的类型为long

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "partner_id")
    private long partnerId;

在我们的Partner控制器类中,我们为基本的CRUD操作编写了一些函数。当我们进行post调用以添加合作伙伴时,我们省略了主键partnerId,并包含其他字段的信息。发布成功,并且可以在数据库中看到数据。

但是,当我们尝试进行put调用以更新新添加的合作伙伴时,它会在“合作伙伴”表中创建一个新的合作伙伴条目。

起初,这似乎是一个代码级问题,但是我们测试了从基础数据集添加到表中的一个条目上的put调用,效果很好。我们使用FindById()isPresent()来查看是否有来自partnerId调用中传入的Partner对象的put的新用户条目,但得到了false 。但是,使用我们通过查询将其手动放入数据库中的3个现有合作伙伴条目之一,它们返回了true

@RequestMapping(method = RequestMethod.PUT, value = PATH)
    public ResponseEntity<?> updatePartner(@RequestBody Partner partner) {
        ...
        System.out.println(partnerRepository.findById(partner.getPartnerId()).isPresent());
    }

似乎post调用正在数据库中设置新的Partner对象,但是任何新发布的条目的partnerId都不属于long类型,这会中断{ {1}}。我只是想知道是否有人知道为什么会这样,因为我们的实体将主键设置为findById().isPresent()类型,并且控制器正在向数据库发送long对象。

0 个答案:

没有答案