通过 REST 调用使用外键将项目添加到集合中
Posted
技术标签:
【中文标题】通过 REST 调用使用外键将项目添加到集合中【英文标题】:add item to the collection with foreign key via REST call 【发布时间】:2016-10-20 13:17:12 【问题描述】:我有 2 个具有双向关联的 jpa 实体。
拥有项目集合的实体Container
(oneToMany)
省略 getter/setter
@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;
实体 Item
包含对容器 (ManyToOne) 的引用,带有属性值和日期。
省略 setter/getter
@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;
我也在使用 spring-data 存储库来公开数据。
我的接口存储库只是扩展了 CrudRepository<Container, Long>
和 CrudRepository<Item, Long>
@RepositoryRestResource
public interface ItemRepository extends CrudRepository<Item, Long>
@RepositoryRestResource
public interface ContainerRepository extends CrudRepository<Container, Long>
我正在尝试通过 REST 调用创建项目。
首先我在项目存储库rest/items
上尝试了这个
POST "value" : 666, "date" : "2016-01-31T23:00:00.000+0000", "container": "id":"1"
但它只是在容器上创建具有空引用的项目。
当我尝试通过容器存储库添加时rest/containers/1/items
POST "value" : 666, "date" : "2016-01-31T23:00:00.000+0000", "container": "id":"1"
我得到HTTP/1.1 204 No Content
和<Response body is empty>
。没有创建实例。
我的问题是如何通过引用容器的 REST 调用添加项目。
编辑:要指定我的问题,我想为现有容器添加新项目。通过rest(json)创建Item实例时,我不确定如何处理外ID键
【问题讨论】:
【参考方案1】:我通过在 json 中使用指向容器的链接解决了这个问题。
POST "value" : 666, "date" : "2016-01-31T23:00:00.000+0000","container":"http://localhost:8080/container/1"
我不确定没有spring-data-rest
是否可以工作
编辑:我应该指出,链接资源必须是 @RepositoryRestResource
并且应该是聚合根。
【讨论】:
为了将数据保存到数据库中的多对多查找表,应该使用什么 json 进行发布,我无法使用 spring boot data rest 保存具有多对多关系的对象。【参考方案2】:http 响应状态 204 为无内容。也就是说,您调用的 REST 方法是无效的,即使创建了实例,它也不会返回任何内容。
您确定没有创建实例吗?如果没有,请将代码发布到应该创建它们的位置,以便我们更好地了解发生了什么。
【讨论】:
实例不是通过 POST rest/containers/1/items 创建的 当我 GET /rest/container/items 时,没有列出新实例。当我列出 GET /rest/items 时也没有。 如果没有创建实体的代码,我无法说出问题所在。编辑包含该代码的帖子。以上是关于通过 REST 调用使用外键将项目添加到集合中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 1.7 中通过外键将 created_by 和 updated_by 用户添加到 model.py? [复制]