java - hibernate 更新一对多项目集

标签 java mysql hibernate annotations

  • 销售订单实体。

    @Entity
    @Table(name = "sales_orders")
    @IdClass(ReceiptPK.class)
    public class SalesOrders implements Serializable {
    
        public SalesOrders() {
        }
        @Id
        protected Integer receiptID;
        @Id
        protected Integer dateKey;
    
        public SalesOrders(Integer receiptID, Integer dateKey) {
            this.receiptID = receiptID;
            this.dateKey = dateKey;
        }
    //order contains many details
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "salesOrders")
    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
    private Set<SalesOrderDetails> orderDetails = new HashSet<SalesOrderDetails>();
    
    public Set<SalesOrderDetails> getOrderDetails() {
        return orderDetails;
    }
    
    public void setOrderDetails(Set<SalesOrderDetails> orderDetails) {
        this.orderDetails = orderDetails;
    }
    // other property ..
    
  • 订单详细信息实体。

    @Entity
    @Table(name = "sales_order_details")
    public class SalesOrderDetails implements Serializable {
    
        public SalesOrderDetails() {
        }
        private int id;
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        // Order holder
        private SalesOrders salesOrders;
    
        @ManyToOne
        @JoinColumns({
            @JoinColumn(name = "order_num", referencedColumnName = "receiptID"),
            @JoinColumn(name = "date_key", referencedColumnName = "dateKey")})
        public SalesOrders getSalesOrders() {
            return salesOrders;
        }
    
        public void setSalesOrders(SalesOrders salesOrders) {
            this.salesOrders = salesOrders;
        }
         // other property ...
    

我的问题:当我尝试删除不影响 sales_order_details 的订单商品时。

            SalesOrders saleOrder = (SalesOrders) getSession().get(SalesOrders.class ,new ReceiptPK(receiptID,dateKey));
            saleOrder.getOrderDetails().remove(someDetails);
            getSession().beginTransaction();
            getSession().saveOrUpdate(saleOrder);
            getSession().getTransaction().commit();  

但是 someDetails 并未删除。

--任何帮助将不胜感激......

最佳答案

我认为您必须提交相同的事务。

getSession().getTransaction().begin();
getSession().saveOrUpdate(saleOrder);
getSession().getTransaction().commit();

关于java - hibernate 更新一对多项目集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923282/

相关文章:

java - 如何查找按日期排序的 List<Object>

java - 处理谷歌日期字符串并递增它们

java - Java Android 多类图

java - 与名单上的情侣一起工作,忽略顺序......一些优雅的方式?

MySQL:使用表中的值对另一个表进行数学运算

mysql - WordPress 站点正在使用许多与 mysql 的连接

java - Hibernate 和 JDBC 在一个事务中

java - 使用单独的应用程序作为依赖项时包不存在

mysql - 是否可以在对 mysql 记录进行分组之前对其进行排序?

java - 将 JAVA 库重定位到 Tomcat Lib 文件夹后出现的问题