gpt4 book ai didi

java - 如何创建多对多连接,其中所有者实体可以拥有多个拥有的实体?

转载 作者:行者123 更新时间:2023-12-02 01:04:25 28 4
gpt4 key购买 nike

我需要三个实体 - 用户、订单和产品。订单里面可以有多个产品,产品也可以在多个订单中。但在一份订单中我们可以拥有多种类似的产品。如何使用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

一个订单可以包含多少个订购的产品?一个,还是几个?几个,对吗?

因此,OrderOrderedProduct 之间的关联将是 XxxToMany。是 OneToMany 还是 ManyToMany

嗯,OrderedProduct 包含为一个特定订单订购的产品数量,对吗?它的表包含一个订单的ID,对吗?因此它与一个特定订单相关联。因此关联只能是 OneToMany

关于java - 如何创建多对多连接,其中所有者实体可以拥有多个拥有的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57744788/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com