小编rot*_*ter的帖子

修改Spring Data Rest中的@OneToMany实体而不使用其存储库

在项目中,我使用的类型的对象一个具有一对多的关系(orphanRemoval = TRUE,级联= CascadeType.ALL,取= FetchType.EAGER)至类型的对象.我需要SpringDataRest(SDR )使用单个POST请求来存储完整的完整A对象及其B对象(子对象).我在SDR中尝试了几种组合,唯一对我有用的组合是为对象A创建@RepositoryRestResource并为对象B创建@RepositoryRestResource ,但是将此(B)标记为exported = false(如果我没有创建存储库)在对象B之外,它不起作用 - >只是一个对象将存储在单个POST请求中,而不是它的子类型(@OneToMany关系)类型B ;如果B存储库省略了exported = false,则会出现相同的结果).这是否正确,以及如何实现它的唯一方法(单个POST请求同时存储所有对象)?

我之所以要问,在我之前的例子中,我必须(我想)通过使用A的存储库来控制所有对象"生命周期" .我很好,因为A - > B关系是组合(B不存在于A之外).但是我有严重的问题,即使用其父存储库通过SDR 编辑(也删除)B类型的某个对象(因为对象B没有导出自己的存储库).也许,根据定义,这是不可能的.我试过这些解决方案:

  • "/ A/1/B/2"的PATCH不起作用 - >方法不允许(在标题中是"允许:GET,DELETE") - >所以,PUT也是不可能的
  • 使用json补丁内容类型[{"op":"add","path":"/ B/2",....}] - > JCH Patch也无法使用 - PATCH for"/ A/1" "目标数组中没有这样的索引" - 因为Json Patch在"array"之后使用标量"2"作为其数组的索引.这在Java世界中是不实际的,当关系保存在对象集中时 - 索引根本就没有意义.
  • 我可以导出对象B的存储库(exported = true)以"直接"操作它,但是这样我就会失去将整个对象 …

java rest spring-data-rest json-patch

11
推荐指数
1
解决办法
6927
查看次数

标签 统计

java ×1

json-patch ×1

rest ×1

spring-data-rest ×1