我需要三个实体——用户、订单和产品。订单可以有多个产品,产品可以有多个订单。但是在一个订单中,我们可以有几个相似的产品。如何使用Hibernate来组织它?
我认为其中一种方法是创建另一个实体-OrderProducts,但是我需要使用什么映射?或者有另一种简单的方法可以做到这一点吗?
Order.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))
这里是订单行实体的一个示例。我建议在其中添加数量字段。它可以包含一些额外字段,如产品价格或折扣等。。
@Entity
@Table(name = "order_row")
public class OrderRow {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
int id;
@ManyToOne(optional = false)
@JoinColumn(name = "order_id", nullable = false)
Order order;
@ManyToOne(optional = false)
@JoinColumn(nullable = false, name = "product_id")
Product product;
@Column(name = "quantity", nullable = false)
Integer quantity;
}
我建议使用fetch=FetchType。在每个@一个域和@多个域注释中
现在,您可以编辑订单实体添加订单行字段
@Table(name = "orders")
public class Order {
// fields
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch =
FetchType.LAZY)
Set<OrderRow> orderRows = new HashSet<>();
// getters, setters
}
让我们从正确命名这个新实体开始:OrderedProducts
。
一份订单可以包含多少订购产品?一个,还是几个?好几个,对吧?
因此,订单和订购产品之间的关联将是一个xxx域。它是一个多域还是多域?
好吧,OrderedProducts
包含为一个特定订单订购的产品数量,对吗?它的表包含一个订单的ID,对吗?所以它链接到一个特定订单。所以关联只能是一个OneTo众多
。
我正在尝试使用JPA注释设计我的实体类。 我正在努力做的是: 具有 ID、***电子邮件、密码、activation_key、active、role***的用户表 和许多类型的用户表。 student_table user_id第一名最后一名公司地址等 MENTOR user_id第一名最后一名DOB部门等 当用户注册时,根据他们的角色,他们将被分为两个表(用户、导师/学生) 当它们登录时,Man
问题内容: 我们可以在Android中拥有服务的多个实例吗?我想要一种可以在特定时间使手机静音的服务,并且我想重新使用该服务以使手机在特定时间处于振动模式。因此,基本上,如果我可以使该服务多次运行,则无需创建其他服务即可将手机设置为振动模式。另外,如果我们可以运行多个实例,请说明如何停止它。任何代码提示都会有很大帮助。 问题答案: 我们可以在Android中拥有服务的多个实例吗? 不能。您可以具有
房间类别 长话短说,这一点是为了添加房间,并能够导航它们,捡起物品,然后放下它们。在我尝试运行程序时,我注意到我不能有多个北/南/东/西键。我怎样才能避开这件事,这样我才能把它做好?
我用uWSGI运行一个烧瓶服务器。进程由System d启动。 现在我需要一些以“while(True)”运行的子流程,它们必须始终收集一些信息。 我现在开始一个具有多重处理的子过程。 下面是我的一些代码: 然后我用systemd重新启动/停止uWSGI,进程阻塞,当然它不受SIG影响。 我的第一个想法是实现一个单音句柄: 但不幸的是,他们没有点火。。。 如果服务器即将关闭,是否会触发事件,或者我
我试图理解javax.persistence注释@onetoone、@manytoone和@manytomany。这些注释的描述提到了。具体来说: [@OneToOne]:如果关系是双向的,则非拥有方必须使用OneToOne注释的mappedBy元素来指定拥有方的关系字段或属性。 [@manytoone]:如果关系是双向的,那么非所有者OneToMany实体端必须使用mappedBy元素来指定作为
我在读下面的文章: 然而,student实体是用mappedBy注释的,我知道任何用mappedBy注释的实体都是相反的一面。谁能解释一下这个吗? 2-哪个ID是外键?@PrimaryKeyJoinColumn在Address实体中使用,这意味着地址Id是主键和外键吗?在下面的文章中,它们有相同的示例,但它是单向的: http://websystique.com/hibernate/hiberna