在 Spring Data JPA 中嵌入对象而不是链接

我正在使用 Spring Boot 和 Spring Data JPA 创建一个简单的 Web 商店作为大型应用程序的一部分。我有许多商品(我的库存),订单将包含这些商品的集合(以及运输信息等)。

库存中的商品可能会更新 - 例如,更改价格。我希望能够在没有版本控制等开销的情况下执行此操作。但是,当我查找过去的订单时,我想获取当时使用的信息。

Spring Data JPA 中是否有一种方法可以在我的订单中嵌入项目的副本,而不是链接到项目对象?

我的课程如下:

ShopItem.java

@Entity

public class ShopItem {

  @Id

  @GeneratedValue

  private Long id;


  private String name;

  private String description;

  private int price;

  private int stock;


  public Long getId() {

    return id;

  }

  public void setId(Long id) {

    this.id = id;

  }


  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }


  public String getDescription() {

    return description;

  }

  public void setDescription(String description) {

    this.description = description;

  }


  public int getPrice() {

    return price;

  }

  public void setPrice(int price) {

    this.price = price;

  }


  public int getStock() {

    return stock;

  }

  public void setStock(int stock) {

    this.stock = stock;

  }

  public void reduceStock(int by){

    this.stock = this.stock - by;

  }

}

ShopOrder.java


@Entity

public class ShopOrder {

  @Id

  @GeneratedValue

  private Long id;


  @ManyToOne

  private Member member;


  private boolean postage;

  @OneToMany

  private List<ShopOrderItem> items;


  public Long getId() {

    return id;

  }

  public void setId(Long id) {

    this.id = id;

  }


  public Member getMember(){

    return member;

  }

  public void setMember(Member member) {

    this.member = member;

  }


  public boolean getPostage() {

    return postage;

  }

  public void setPostage(boolean postage) {

    this.postage = postage;

  }


  public List<ShopOrderItem> getItems() {

    return items;

  }

  public void setItems(List<ShopOrderItem> items) {

    this.items = items;

  }

}


POPMUISE
浏览 75回答 1
1回答

繁星coding

当您使用 ORM 时,Spring Data JPA 只是让您的生活变得更轻松的一种方法。当您使用数据库时,ORM 只是让您的生活更轻松的一种方法。问题是,如果您使用的是关系数据库,除了克隆数据之外,没有办法做您想做的事情。因此,一种方法是克隆 ShopItem 实体并将其作为新条目存储在数据库中的专用表中。另一种方法可能是使用 NoSQL DB,它可以更好地处理这个问题。有多种不同的方法来存储订单历史记录,但我想不出 Spring data JPA 中有任何可以开箱即用的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java