我目前正在开发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
对象。