Relationship table data overwritten in many-to-many hibernate(在多对多Hibernate中覆盖的关系表数据)
问题描述
我有两个具有多对多关系的实体类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关系表,并将数据作为主键从ORDER和PRODUCT插入。
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表中更新Quantity,在product_order表中插入order_id和product_id。提前谢谢您。
推荐答案
通过正确标识所有者实体并进行以下更改使其正常工作:
@Entity
@Table(name = "Order_")
public class Order implements Serializable {
.......
@ManyToMany
@Cascade({CascadeType.PERSIST})
@JoinTable(name = "product_order",
joinColumns = { @JoinColumn(referencedColumnName="id") },
inverseJoinColumns = { @JoinColumn(referencedColumnName="id") })
private List<Product> products;
.......
}
@Entity
@Table(name = "Product")
public class Product implements Serializable {
.......
@Cascade({CascadeType.PERSIST})
@ManyToMany(mappedBy="products")
private List <Order> orders;
.......
}
这篇关于在多对多Hibernate中覆盖的关系表数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在多对多Hibernate中覆盖的关系表数据
基础教程推荐
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01