如何在请求中按ID引用实体

时间:2019-04-26 19:12:24

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

我正在设置一个Spring Boot应用程序,已经设置了实体并连接到数据库,现在我想实现其余API的数据保存。说我有这样的实体

@Entity
class A {
   ...
   private String name;
   @OneToOne
   private B b; 
   ...
} 

,当ID为1的B存在时,我希望能够发送此帖子“ A”创建请求。该请求的结果将是A链接到B。

{
   "name":"name Of A"
   "B": {
      "id":1
   }
}

Spring Boot提供的工具可以做到这一点吗,或者这不是传统的做事方式。预先感谢。

1 个答案:

答案 0 :(得分:0)

据我所知,没有任何内置的解决方案可以简单地将json映射到要由存储库直接保存的实体。

您需要在其余控制器中将@RequestBody用作A参数,然后手动使用entityManager.getReference(id_of_b)来设置A的B实体。然后可以使用repository.save ...

如果您想做得更好,则需要编写自己的HandlerMethodArgumentResolver并实现和注册StdDesrializer中的Jackson,以确定@OneToOne@ManyToOne关系,然后由杰克逊获取关系的ID,并由entityManager.getReference(id_of_b)进行设置,如上所述。

这样,生成的实体将准备好由存储库直接保存。