java - 使用 Spring Data 在单个请求中发布子实体

标签 java spring-data spring-data-rest

我正在玩 Spring Data examples 。我定义了一个实体 Parent,它具有一组关联的 Child 实体。

@Entity
@Table
@Data
public class Parent {

    @Id
    @GeneratedValue
    private Integer id;

    @NotNull
    private String name;

    @Fetch(FetchMode.SUBSELECT)
    @OneToMany(fetch = EAGER, cascade = {ALL}, orphanRemoval = true)
    private Set<Child> childs;

}

@Entity
@Table
@Data
public class Item {

    @Id
    @GeneratedValue
    private Integer id;

    @NotNull
    private String name;

}

以及相应的存储库。我的问题是,当使用curl发布一个带有Child的新Parent时,我遇到了错误无法读取JSON文档:无法从类型转换[java .net.URI] 类型 还描述了 here 。该问题的答案指出,需要先发布子实体,然后使用返回的 URL。这与 this answer 中描述的过程相同。作者:奥利弗·吉尔克。

是否有任何方法可以配置 Spring Data 来反序列化完整的子实体?

最佳答案

如果您不导出 Item 的存储库(通过使用 @RepositoryRestResource(exported = false) 注释存储库),您将始终获得子项序列化,并且您可以在父级上为其提供 POST

Item 也将不再有顶级 REST API 端点,并且父级上也不再有关联资源。

您的关系中已经有 cascade=ALL - 所以这种方法应该可行。

关于java - 使用 Spring Data 在单个请求中发布子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43872811/

相关文章:

java - Apache POI with Android -- 如何创建、阅读、编写、删除 PowerPoint 演示文稿?

java - 为什么将设备语言更改为 RTL 语言时 fragment/Activity 布局看起来很糟糕?

java - 将 Tapestry 与 Primefaces 一起使用?

java - Spring引导-gson单例?

postgresql - Spring Data JPA JSONB 参数化

elasticsearch - spring-data-elastic-search 中的父/子关系

java - 如何使用 Spring Data(MongoDB) 映射通用集合?

rest - 处理RESTful产品的批量操作回滚

java - 为什么我的@RestController 中接收到的实体将值设置为 null 而不是默认值

java - Spring Data Rest - PUT 存储库在子引用上静默失败