Dev*_*xit 15 spring spring-data-jpa spring-data-rest spring-hateoas spring-boot
我最近开始在我的应用程序中使用spring-data-rest.我有以下JPA实体:
@Entity
public class Super {
@Id
private long id;
@JoinTable
@OneToMany(cascade = CascadeType.ALL)
private List<Child> children;
}
-----------------------------------------
@Entity
public class Super2 {
@Id
private long id;
@JoinTable
@OneToMany(cascade = CascadeType.ALL)
private List<Child> children;
}
-----------------------------------------
@Entity
public class Child {
@Id
private long id;
@Column
private String childMetadata;
}
Run Code Online (Sandbox Code Playgroud)
我能想到的节能的新实例的2种方法Super或Super2:
@RestResourcefor Childclass - > Child在创建实例之前创建所有实例Super或Super2- > Child在Superor的有效负载中传递所有实例的URL Super2.Child有效负载中的详细信息,Super无论Super2是否@RestResource为Child类暴露,CascadeType.ALL将负责创建Child实例.这两种方法都有一些优点:
Child对象Super或Super2仅通过POST新的URL Child添加http://<server>:<port>/super/1/children.但是如果我使用这种方法,我肯定会失去数据库的级联功能.Child实例的灵活性.有什么我完全错过了吗?我想要一种方法来使用数据库的级联功能,而不会失去动态添加新子项的灵活性.
感谢帮助.:)
第三种解决方案应该适合您:
您仍然可以使用/children,但您将能够使用 super 检索子级并发布它!
为此,只需更改您的 Super(和 Super2)类,如下所示:
public class Super {
@Id
@GeneratedValue
private Long id;
@JoinTable
@OneToMany(cascade = CascadeType.ALL)
@RestResource(exported=false)
private List<Child> children;
...
}
Run Code Online (Sandbox Code Playgroud)
然后您可以发布到/supers:
{
"children": [
{
"childMetadata": "inner"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |