如何使用具有OneToMany并且嵌套ManyToOne关系的Spring Data Rest更新REST资源

max*_*axb 5 rest spring spring-data-jpa spring-data-rest

我有一个简单的发票系统,需要在其中创建和更新发票。我试图为此使用Spring Data Rest,但是从我从文档中获得的信息来看,我实际上最终会做很多电话来实现更新。

发票模型

@Entity
class Article {
    @Id
    @GeneratedValue
    Long ID;
    @Basic
    String name;
}
@Entity
class Invoice {
    @Id
    @GeneratedValue
    Long ID;
    @Basic
    String customer;
    @OneToMany(cascade=CascadeType.ALL)
    List<InvoiceItem> items;

}
@Entity
class InvoiceItem {
    @Id
    @GeneratedValue
    Long ID;
    @Basic
    double amount;
    @ManyToOne
    private Article article;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Spring Data Rest通过这些Spring Data Rest / JPA存储库将此模型公开给我的Web朋友

@RepositoryRestResource(collectionResourceRel = "articles", path = "articles")
interface ArticleJPARepository extends JpaRepository<Article, Long> {}

@RepositoryRestResource(collectionResourceRel = "invoices", path = "invoices")
interface InvoiceJPARepository extends JpaRepository<Invoice, Long> {}

@RepositoryRestResource(collectionResourceRel = "invoiceitems", path = "invoiceitems")
interface InvoiceItemJPARepository extends JpaRepository<InvoiceItem, Long> {}
Run Code Online (Sandbox Code Playgroud)

假设我有一个如下所示的更新表单:

在此处输入图片说明

在这里我可以做几件事:

  • 更新发票客户
  • 更改现有InvoiceItem的商品
  • 删除一些InvoiceItems
  • 附加一个新的InvoiceItem

从Spring Rest Docs得到的信息是,我现在需要打几个电话。

  1. 我需要更新发票客户 PUT /invoices/1
  2. 然后更新n条商品和InvoiceItem PUT中的金额n次PUT /invoiceitems/<x>/
  3. 追加中号新InvoiceItems 中号次POST /invoiceitems,然后POST /invoices/1/items
  4. 删除InvoiceItem 2 DELETE /invoiceitems/2,然后DELETE /invoices/1/items/<2>

有没有更简单的方法可以使用Spring Data Rest实现这种更新?