我在mysql中有数据库,并且使用hibernate连接到java。我有4张桌子:
订单中的1到多个客户
使用OrdersProducts订购1到多个订单
订购产品多达1个产品。
我的客户和产品已经在数据库中。我的程序从用户收集产品和客户端,我想将它们添加到数据库。我需要做的就是:
使用OrderProducts的ArrayList添加订单
- 添加所有订单产品
-update客户端具有新订单的订单ArrayList
使用OrderProduts的ArrayLists更新所有产品
我的问题:
我首先将哪些对象放到数据库中是否重要,如果是,那么什么应该是正确的序列?
我的实体如下:(已编辑)
@Entity
public class Clients implements Serializable {
@Id
@GeneratedValue
private int idClient;
private String clientName, clientSurname, clientCompany;
@OneToMany(mappedBy = "clients")
private List<Orders> listOfOrders = new ArrayList<Orders>();
}
@Entity
public class Orders implements Serializable {
@Id
@GeneratedValue
private int idOrder;
private double totalAmount;
@ManyToOne
@JoinColumn(name = "idClientFK")
private Clients clients;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "orders")//, fetch = FetchType.EAGER)
private List<OrdersProducts> listOfProductsInOrder = new ArrayList<OrdersProducts>();
}
@Entity
public class OrdersProducts implements Serializable {
@Id
@GeneratedValue
private int idOrderProduct;
private int productAmount;
private float productsValue;
@ManyToOne
@JoinColumn(name = "idOrderFK")
private Orders orders;
@ManyToOne
@JoinColumn(name = "idProductFK")
private Products products;
}
@Entity
public class Products implements Serializable {
@Id
@GeneratedValue
private int idProduct;
private String productName;
private double productValuePerUnit;
private String productUnit;
private int productCount;
private String productCompany;
@OneToMany(mappedBy = "products")
private List<OrdersProducts> listOfOrdersProducts = new ArrayList<OrdersProducts>();
}
答案 0 :(得分:2)
在数据库中保留新订单的顺序为:
当用户按下新订单按钮时:创建一个新的订单实体。
当用户向订单添加新产品时:创建OrdersProducts实体。
更新与订单和产品的关系。
将它们添加到订单实体中的listOfProductsInOrder列表。
用户按下结账单时:保留订单实体。
但是,你必须改变:
@OneToMany
由:
@OneToMany(cascade = CascadeType.ALL)
订单实体中的。
注意:最好以单数形式给模型实体命名。
修改强>
好的,我会实现双向关系以提高灵活性:
在您的订单实体中,您应具有与客户实体的ManytoOne关系。
在您的OrdersProducts中,您应该与Orders有一个ManytoOne关系,而对产品有另一个关系。
通常在持久化实体之前更新所有关系。
对于这些双向关系,systax将是:
客户端:
@Entity
public class Clients implements Serializable {
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "idClientFK")
private List<Orders> listOfOrders = new ArrayList<Orders>();
}
订单:
@Entity
public class Orders implements Serializable {
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "idOrderFK")
private List<OrdersProducts> listOfProductsInOrder = new ArrayList<OrdersProducts>();
@JoinColumn (referencedColumnName = "idclient")
@ManyToOne
private Clients idClientFK;
}
OrdersProducts:
@Entity
public class OrdersProducts implements Serializable {
...
@JoinColumn (referencedColumnName = "idorderproduct")
@ManyToOne
private Products idProductFK;
@JoinColumn (referencedColumnName = "idorder")
@ManyToOne
private Orders idOrderFK;
}
产品:
@Entity
public class Products implements Serializable {
...
@OneToMany(fetch = FetchType.EAGER, mappedBy = "idProductFK")
private List<OrdersProducts> listOfOrdersProducts = new ArrayList<OrdersProducts>();
}
如果您有双向关系,则可以保留整个Orders实体,或者每次只能保留一个OrdersProducts实体。但是,如果您只有单向关系,则必须持久保存客户端实体,以便为此客户端持久保留一个或多个新订单或已修改的订单。并且相关实体的导航将仅限于父亲与孩子的方向。