我正在玩 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/