如何使用自动生成的值创建一个复合主键,并使用休眠和弹簧 MVC 创建一个外键



我正在开发一个Web应用程序,客户调用它给员工,他将客户的订单放到系统中。

根据我的ER diagramOrderDetail类包含一个orderIdproductId的复合主键。它还包含orderedQuentity列。我想要的是,当客户下订单时,它必须有他/她订购的产品以及他/她订购的每种产品的数量以及下订单的人(员工).....

但我觉得在我的方式中,orderDetail类只能包含产品列表,而不是每个产品的数量。

我该怎么做我想做的事?

这是我尝试实现的实体类。

客户类别 :

@Entity
public class Customer {
    @Id
    @GeneratedValue
    private Integer id;
    private String firstName;
    private String lastName;
    private String companyName;
    private Integer teleponeNumber;
    @OneToMany(mappedBy="customer")
    private List<OrderDetail> orders;
}

产品类别 :

@Entity
public class Product {
    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private Integer availableQuantity;
    private String unitType;
    private Integer unitPrice;
    private String description;
    @ManyToMany(mappedBy="products")
    private List<OrderDetail> details;

}

订单类别 :

@Entity
public class OrderDetail {
    @Id
    @GeneratedValue
    private Integer orderId;
    private Integer orderedQuentity;    
    private String customerAddress;
    private String shipingAddress;
    private String orderStatus;
    @ManyToOne
    @JoinColumn(name="Employee_Id")
    private Employee employee;
    @ManyToOne
    @JoinColumn(name="customer_id")
    private Customer customer;
    @ManyToMany
    @JoinTable
    private List<Product> products;
}

员工类别 :

@Entity
public class Employee {
    @Id
    @GeneratedValue
    private Integer id;
    private String firstName;
    private String lastName;
    private String designation;
    private String email;
    private String password;
    @OneToMany(mappedBy="employee")
    private List<OrderDetail> orders;
}

从客户到订单详细信息,您有一个一对一的关系,我建议您创建一个 JoinTable

因此,客户实体将如下所示:

@Entity
public class Customer {
@Id
@GeneratedValue
private Integer id;
private String firstName;
private String lastName;
private String companyName;
private Integer teleponeNumber;
@OneToMany(mappedBy="customer")
@JoinTable(name = “customer_order_details”, joinColumns= { @JoinColumn(name = “customer_id”, referencedColumnName=”id”) }, inverseJoinColumns = { @JoinColumn(name = “order_id”, referencedColumnName = “id”) })
private List<OrderDetail> orders;
}

员工实体中的相同情况:

@Entity
public class Employee {
@Id
@GeneratedValue
private Integer id;
private String firstName;
private String lastName;
private String designation;
private String email;
private String password;
@OneToMany(mappedBy="employee")
@JoinTable(name = “employee_order_details”, joinColumns= {     @JoinColumn(name = “employee_id”, referencedColumnName=”id”) }, inverseJoinColumns = { @JoinColumn(name = “order_id”, referencedColumnName = “id”) })
private List<OrderDetail> orders;

}

和产品实体:

@Entity
public class Product {
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer availableQuantity;
private String unitType;
private Integer unitPrice;
private String description;
@ManyToMany(mappedBy="products")
@JoinTable(name = “product_order_details”, joinColumns= { @JoinColumn(name = “product_id”, referencedColumnName=”id”) }, inverseJoinColumns = { @JoinColumn(name = “order_id”, referencedColumnName = “id") })
private List<OrderDetail> details;

最新更新