当前位置: 首页 > 知识库问答 >
问题:

订单到行项目的JPA映射

范翰池
2023-03-14

声明了一个订单实体。它由日期、客户和LineItem对象列表组成。

行项目具有产品和数量的属性。我正试图模拟与JPA的这种关系。每个行项目都有ID似乎不正确,但我不确定如何在JPA中表达行项目和订单之间的关系:

@Entity
@Table(name = "ORDERS")
public class Order {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO, generator = "cust_seq_gen")
   @SequenceGenerator(name = "cust_seq_gen", sequenceName = "CUSTOMER_SEQUENCE", allocationSize = 5)
   private int id;
   @Temporal(DATE)
   @Column(name = "DATE_PLACED")
   private Date datePlaced;
   @Enumerated(EnumType.STRING)
   @Column(name = "STATUS")
   private Status status;
   @JoinTable(
        name = "LINE_ITEM_JOIN",
        joinColumns = @JoinColumn(name = "ORDER_ID"),
        inverseJoinColumns = @JoinColumn(name = "LINE_ITEM_ID")
   )
   private List<LineItem> orderSegments;
   @Column(name = "TOTAL", precision = 10, scale = 2)
   private double total;
   @ManyToOne
   private Customer customer;
   @Column(name = "NOTES")
   private String notes;
   }

LineItem类

@Entity
@Table(name = "LINE_ITEMS")
public class LineItem {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO, generator = "line_item_seq_gen")
  @SequenceGenerator(name = "line_item_seq_gen", sequenceName = "LINE_ITEM_SEQUENCE",   allocationSize = 5)
  private Order associatedOrder;
  private Product product;
  private int quantity;
  ...
}

我认为行项目的主键应该是产品id、数量和订单id的组合,尽管我知道我没有对此建模。

共有1个答案

越福
2023-03-14

通过将行项目定义为嵌入集合,也可以忽略行项目的id。例如

public class Order {

     @ElementCollection @OrderColumn
     private List<LineItem> orderSegments = new ArrayList<>();

}

@Embeddable
public class LineItem {

     @ManyToOne
     private Product product;

     private int quantity;

}

这样您将无法直接通过它们的id检索LineItem。您需要order来获取或添加LineItem

 类似资料:
  • 我有4张桌子: 库存(库存ID、可用数量) 一个客户可以有多个订单,而一个订单由多个orderDetails项目组成。我正在尝试将库存项目存储在由库存项目和数量整数组成的映射中。 当我尝试以这种方式持久化它时,第一个库存项目将以1的orderID添加到Order详细信息表中。但是下一个是使用2的orderID插入的(不存在)。 有什么帮助吗?

  • 为了配置一个简单的JPA项目,我使用了Wildfly 8,数据源是在单机版中配置的。xml。 在Web项目中,我配置了持久性。像这样的xml文件 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 但是,当我添加br时。通用域名格式。卖应用程序。奥姆。通常,我在项目启动时出错,该错误表示存在hibernate问题org/hiber

  • 我正在使用此API在WooCommerce中创建订单:https://github.com/kloon/WooCommerce-REST-API-Client-Library 添加订单时: 一切正常,秩序是在商业中建立的。 但是,当我想添加一个产品变体,其中包含关于变体的元数据时,我应该如何做呢? 我尝试了几件事,包括: 我想要实现的是,在获得订单时: 颜色信息已添加到行项目的元数据中(因此发送电

  • 我有2个实体:Field和ViewOptions 省略与问题无关的字段和方法

  • 问题内容: 我正在寻找一种确定范围的方法 。 Golang规范指出以下内容: 未指定地图的迭代顺序,并且不能保证每次迭代之间都相同。如果在迭代过程中删除尚未到达的映射条目,则不会生成相应的迭代值。如果映射条目是在迭代过程中创建的,则该条目可能在迭代过程中产生或可以被跳过。对于创建的每个条目以及从一个迭代到下一个迭代,选择可能有所不同。如果映射为nil,则迭代次数为0。 我在StackOverflo