我想在A实体的edit界面commit之前,修改另一个实体B的值,于是我在该编辑界面的BeforeCommitChangesEvent事件中,使用dataManager.save()修改B实体的值。但如果是create的方式来到A的edit界面,能够正常点击OK提交;而edit的方式来到此界面,点击OK进行commit会报错:
之后我把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)
去掉。界面会自动提交。
对了,欢迎加入社区!
好的,感谢回复