SpringDataREST:使用PUT替换包含嵌入式集合的实体

SpringDataREST:使用PUT替换包含嵌入式集合的实体,spring,rest,spring-data-rest,Spring,Rest,Spring Data Rest,我有一个通过@RepositoryRestResource注释的存储库公开的实体,该存储库包含另一个实体(称为Seat)的集合(一对多),该实体未通过存储库公开。 我试图使用http PUT发送json来更新公开的实体(称为数据包),该json表示整个实体,包括席位集合。 我希望替换现有数据,但是在PUT完成后,Seats集合包含一组额外的数据,即Spring将Seats添加到现有集合中,而不是替换它们 我使用的是Spring Boot 1.4.0 @Entity public class Pa

我有一个通过@RepositoryRestResource注释的存储库公开的实体,该存储库包含另一个实体(称为Seat)的集合(一对多),该实体未通过存储库公开。 我试图使用http PUT发送json来更新公开的实体(称为数据包),该json表示整个实体,包括席位集合。 我希望替换现有数据,但是在PUT完成后,Seats集合包含一组额外的数据,即Spring将Seats添加到现有集合中,而不是替换它们

我使用的是Spring Boot 1.4.0

@Entity
public class Packet extends BaseEntity {

  @OneToMany(....CascadeType.ALL...)
  public @Getter List<Seat> additionalSeats;

  public void setAdditionalSeats(List<Seat> additionalSeats) {
    this.additionalSeats = additionalSeats;
    if (additionalSeats != null) {
        for (Seat bs : additionalSeats) {
            bs.setPacket(this);
        }
    }
  }
}

@Entity
public class Seat extends BaseEntity {

  private @Getter @Setter String price;
  private @Getter @Setter String itemName;
  private @Getter @Setter int count;

  @ManyToOne
  private @Getter @Setter Packet packet;
}
@实体
公共类包扩展BaseEntity{
@OneToMany(…级联型。所有…)
public@Getter列表附加席位;
公共无效设置附加座位(列出附加座位){
此项。额外座位=额外座位;
如果(额外座位!=null){
用于(座椅bs:附加座椅){
bs.setPacket(本);
}
}
}
}
@实体
公共类席位扩展BaseEntity{
私有@Getter@Setter字符串价格;
私有@Getter@Setter字符串itemName;
私有@Getter@Setter整数计数;
@许多酮
私有@Getter@Setter包;
}

是否有办法替换嵌入集合中的项目?

是否发布包含主键的数据包JSON?@FrederikHeremans抱歉,必须更正:son确实包含带有self和数据包HREF的_links属性。但是JSON中没有ID。我发送PUT到的Url包含数据包的ID,类似于:localhost/api/packets/123。数据包本身中的数据被替换,但座位被添加到现有的座位上,我试着用java编写一个测试用例,结果很有启发性:不可能更新additionalSeats,也就是说,如果我检索座位列表并进行修改,当我试图保存数据包实体时,我会得到一个异常,即集合是不可修改的。相反,我需要删除数据包并存储一个新的数据包,其中包含一份已更改数据的副本。通过REST(使用DELETE和POST)也可以做到这一点。