【发布时间】:2018-04-27 23:27:37
【问题描述】:
我有两个具有多对多关系的实体类Order和Product(多个订单可能有相同的产品,只要库存不为空,一个订单可能包含多个产品)如下:
@Entity
@Table(name = "Order_")
public class Order implements Serializable {
.......
@ManyToMany(mappedBy="orders")
private List<Product> products;
.......
}
@Entity
@Table(name = "Product")
public class Product implements Serializable {
.......
@ManyToMany
@JoinTable(name = "product_order",
joinColumns = { @JoinColumn(referencedColumnName="id") },
inverseJoinColumns = { @JoinColumn(referencedColumnName="id") })
private List <Order> orders;
.......
}
以下是用于插入订单和产品的 Dao。产品是预定义的,我只需要更新它们的数量。该订单将作为新订单插入。必须生成 product_order 关系表,并将数据作为订单和产品的主键插入。
public class OrderDao {
public static void insertProductOrder(Order order, List <Product> cart, List<Integer> quantity){
...............
session.beginTransaction();
Query query;
Product pr;
List list;
List <Order> orders = new ArrayList<>();
orders.add(order);
for(int i=0;i<cart.size();i++) {
query = session.createQuery("from Product where id = :pid");
query.setParameter("pid", cart.get(i).getId());
list = query.list();
pr = (Product) list.get(0);
pr.setQuantity(cart.get(i).getQuantity() - quantity.get(i));
cart.get(i).setOrders(orders);
}
order.setProducts(cart);
session.save(order);
session.getTransaction().commit();
}
}'
在这种情况下,数据被正确地插入到所有三个表中。但是当我尝试插入新订单时,关系表中的数据即 product_order 被覆盖。被覆盖的记录是数量正在更新的记录。这是因为 Hibernate 正在从 product_order 中删除记录,然后再次插入它。我想要的是不需要更新 product_order 表,因为它不是必需的。我只想在 order 表中插入一条记录,更新 product 表中的数量,并将 order_id 和 product_id 插入到 product_order 表中。先感谢您。
【问题讨论】:
标签: java hibernate many-to-many hibernate-mapping persistent