我需要三个实体 - 用户、订单和产品。订单里面可以有多个产品,产品也可以在多个订单中。但在一份订单中我们可以拥有多种类似的产品。如何使用hibernate来组织它?
我认为其中一种方法是创建另一个实体 - OrderProducts,但是我需要使用什么映射?或者还有另一种简单的方法吗?
订单.java
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private Date date;
@ManyToOne
private User user;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "Order_Products",
joinColumns = @JoinColumn(name = "order_id"),
inverseJoinColumns = @JoinColumn(name = "product_id")
)
private List<Product> products;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public Order() {
}
}
产品.java
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
private float price;
@ManyToMany(mappedBy = "products")
private List<Order> orders = new LinkedList<>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
public void addOrder(Order order){
orders.add(order);
}
}
我需要 order_products 表来包含数量列,但我不知道如何实现。
Hibernate: create table order_products (order_id int4 not null, product_id int4 not null)
Hibernate: create table orders (id int4 not null, date date, user_id int4, primary key (id))
Hibernate: create table product (id int4 not null, name varchar(255), price float4 not null, primary key (id))
Hibernate: create table users (id int4 not null, fullname varchar(255), primary key (id))
最佳答案
让我们首先正确命名这个新实体:OrderedProduct
。
一个订单可以包含多少个订购的产品?一个,还是几个?几个,对吗?
因此,Order
和 OrderedProduct
之间的关联将是 XxxToMany
。是 OneToMany
还是 ManyToMany
?
嗯,OrderedProduct
包含为一个特定订单订购的产品数量,对吗?它的表包含一个订单的ID,对吗?因此它与一个特定订单相关联。因此关联只能是 OneToMany
。
关于java - 如何创建多对多连接,其中所有者实体可以拥有多个拥有的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57744788/