在界面事件BeforeCommitChangesEvent中使用dataManager.save()

我想在A实体的edit界面commit之前,修改另一个实体B的值,于是我在该编辑界面的BeforeCommitChangesEvent事件中,使用dataManager.save()修改B实体的值。但如果是create的方式来到A的edit界面,能够正常点击OK提交;而edit的方式来到此界面,点击OK进行commit会报错:
image
之后我把save方法放入BackgroundTask中,该错误解决,请问该报错的原因是什么呢?

这里是具体代码

@Subscribe
    public void onBeforeCommitChanges(BeforeCommitChangesEvent event){
        Product product = getEditedEntity().getProduct();

        int amountInStore = dataManager.load(Product.class).id(product.getId()).one().getUnitsInStore();
        int quantityIncrease = getEditedEntity().getQuantity()-oldQuantity;

        if(quantityIncrease>amountInStore){
            notifications.create().withCaption("库存不足").show();
            event.preventCommit();
        }else {
            product.onChangeOrderLine(quantityIncrease);//修改库存
            dataManager.save(product);
        }

    }

报错的原因是你在 beforeCommit 里面,手动调用 DM.save 了,这个时候数据库的版本会 +1,关闭editor界面的时候又会自动提交一遍,此时检查数据库的版本比getEditEntity的版本高。就报错了。

但是新实体的版本都是 0 所以没出现这个问题。

如果你用DM保存的就是编辑的实体,你可以把最后的 dataManager.save(product) 去掉。界面会自动提交。

对了,欢迎加入社区! :smiley:

好的,感谢回复