onBeforeCommitChanges 中可以适用dataManager.save(saveContext)吗?

onBeforeCommitChanges 中可以适用dataManager.save(saveContext)无效

能说明一下场景吗?

编辑界面,主表的code改变了,保存时想更新子表对应的code

或者你看看 在界面事件BeforeCommitChangesEvent中使用dataManager.save() - #2,来自 qiao - Jmix - jmix.cn 这个帖子,有没有帮助

这样是不是在aftercommit事件中做比较合适?主表保存成功之后再修改子表

是的,但是数据库层面没有关联,只是工程entity有manytoone,会有影响吗

没影响的

image
我去循环里单独datamanager.save也是不行的,是否这里面不能这么写?

你说的不行是指什么不行?可以开一下sql log logging.level.eclipselink.logging.sql=debug 看看控制台是否输出对应的update 语句

只有主表的update语句,没有子表的update

我试了下,是可以的。你打断点能走到保存的语句吗?

@Autowired
private DataManager dataManager;

@Subscribe
public void onAfterCommitChanges(final AfterCommitChangesEvent event) {

    var product = getEditedEntity();

    var pls = dataManager.load(ProductLine.class)
            .query("select e from leot_ProductLine e where e.product = :product")
            .parameter("product", product)
            .list();

    SaveContext sc = new SaveContext();

    pls.forEach(pl->{
        pl.setName(product.getName()+" modified");
        sc.saving(pl);
    });
    dataManager.save(sc);
}

能走到,但是数据库看没有数据

可以测试一下子实体是不是被覆盖了,在aftercommit中创建一个新的子实体,保存一下,看看这个新的在不在数据库

您这是查库获取的,我在这事件里子表的dc全部都没有值,获取不到主表改变之前的code

子表的dc我都单独后台去set值,不用property方式的collection
这种方式可以了。不知道为什么之前代码走了save,update sql没有。