onBeforeCommitChanges 中可以适用dataManager.save(saveContext)无效
能说明一下场景吗?
编辑界面,主表的code改变了,保存时想更新子表对应的code
这样是不是在aftercommit事件中做比较合适?主表保存成功之后再修改子表
是的,但是数据库层面没有关联,只是工程entity有manytoone,会有影响吗
没影响的
我去循环里单独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没有。