У меня есть два класса сущностей 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;
.......
}
Ниже приводится Дао, которое используется для вставки заказа и продукта. Продукты предварительно определены, и мне нужно только обновить их количество. Заказ должен быть вставлен как новый заказ. Необходимо создать таблицу отношений 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_id и product_id в таблицу product_order. Заранее спасибо.