为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2023-07-28 16:33:24
我正在使用 Spring Boot 和 Spring Data JPA 创建一个简单的 Web 商店作为大型应用程序的一部分。我有许多商品(我的库存),订单将包含这些商品的集合(以及运输信息等)。库存中的商品可能会更新 - 例如,更改价格。我希望能够在没有版本控制等开销的情况下执行此操作。但是,当我查找过去的订单时,我想获取当时使用的信息。Spring Data JPA 中是否有一种方法可以在我的订单中嵌入项目的副本,而不是链接到项目对象?我的课程如下:ShopItem.java@Entitypublic 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@Entitypublic 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;  }}
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

当您使用 ORM 时,Spring Data JPA 只是让您的生活变得更轻松的一种方法。当您使用数据库时,ORM 只是让您的生活更轻松的一种方法。

问题是,如果您使用的是关系数据库,除了克隆数据之外,没有办法做您想做的事情。

因此,一种方法是克隆 ShopItem 实体并将其作为新条目存储在数据库中的专用表中。

另一种方法可能是使用 NoSQL DB,它可以更好地处理这个问题。

有多种不同的方法来存储订单历史记录,但我想不出 Spring data JPA 中有任何可以开箱即用的方法。


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信