通过REST调用使用外键将项添加到集合中

Rob*_*Rob 9 java rest json jpa spring-data-jpa

我有两个具有双向关联的jpa实体.

Container包含项目集合的实体(oneToMany)Ommiting getter/setters

@javax.persistence.Entity
@Table(name = "CONTAINER")
public class Container implements Serializable {
    private static final long serialVersionUID = -3288335692695653843L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "container", cascade = CascadeType.ALL)
    private List<Item> items;

}
Run Code Online (Sandbox Code Playgroud)

实体Item包含对容器(ManyToOne)的引用,具有属性值和日期.提出二传手/吸气剂

@javax.persistence.Entity
@Table(name = "ITEM")
public class Item implements Serializable {

    private static final long serialVersionUID = -758343957629274274L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @Basic
    private Long value;
    @Basic
    private Date date;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "CONTAINER_ID")
    private Container container;
}
Run Code Online (Sandbox Code Playgroud)

我也使用spring-data存储库来公开数据.

我的界面存储库只是扩展CrudRepository<Container, Long>CrudRepository<Item, Long>

@RepositoryRestResource
public interface ItemRepository extends CrudRepository<Item, Long> {
}

@RepositoryRestResource
public interface ContainerRepository extends CrudRepository<Container, Long> {
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过REST调用创建项目.

首先我在物品库上试过这个 rest/items

POST { "value" : 666, "date" : "2016-01-31T23:00:00.000+0000", "container": {"id":"1"}}
Run Code Online (Sandbox Code Playgroud)

但它只是在容器上创建带有空引用的项目.

当我尝试通过容器存储库添加 rest/containers/1/items

POST { "value" : 666, "date" : "2016-01-31T23:00:00.000+0000", "container": {"id":"1"}}
Run Code Online (Sandbox Code Playgroud)

我得到的HTTP/1.1 204 No Content<Response body is empty>.没有创建实例.

我的问题是如何通过REST调用添加项目,该调用引用了容器.

编辑:要指定我的问题,我想为现有容器添加新项目.在通过rest(json)创建Item的实例时,我不确定如何处理外部ID键

Rob*_*Rob 9

我通过使用json内部容器的链接解决了这个问题.

POST { "value" : 666, "date" : "2016-01-31T23:00:00.000+0000","container":"http://localhost:8080/container/1"}

我不确定它是否有效 spring-data-rest

编辑:我应该指出,链接的资源必须是@RepositoryRestResource并且应该是聚合根.