【问题标题】:How make a composite primary key using auto generated value and one foreign key using hibernate and spring MVC如何使用自动生成的值创建复合主键和使用休眠和 Spring MVC 的一个外键
【发布时间】:2015-04-19 07:05:54
【问题描述】:

我正在开发一个 Web 应用程序,客户呼叫一名员工,他将客户的订单发送到系统。

在我的ER diagram 中,OrderDetail 类包含一个复合主键 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;
}

【问题讨论】:

    标签: java spring hibernate composite-primary-key


    【解决方案1】:

    从 Customer 到 OrderDetail 你有一个 OneToMany 关系,我建议你创建一个 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;
    
    }
    

    Employee实体中的相同情况:

    @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;
    

    【讨论】:

      猜你喜欢
      • 2018-12-25
      • 2015-12-14
      • 2022-01-28
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多