首页 > 解决方案 > 如何在 Bizlet preSave 中保存未自动保存的相关记录

问题描述

我们有一个名为 NNSF 的 Skyve 文档——当创建(保存)一个 NNSF 时,我们需要创建一个名为 PAM 的记录,它与 NNSF 具有聚合关联。

所以在 preSave() 我们有一些代码来做到这一点:

PAM pam = PAM.newInstance();
// set a bunch of other attributes
...
// set an association to this NNSF
pam.setNnsf(bean);

PAM 记录不会被自动保存,因为它没有被 NNSF 文档引用,所以如果我们不明确调用CORE.getPersistence().save(pam)- 即使 NNSF 是,PAM 也不会保存到数据库中。

如果我们调用CORE.getPersistence().save(pam),我们会得到一个无限循环,preSave()因为 PAM 与这个 NNSF 有关联。

如果我们CORE.upsertBeanTuple(pam)改为调用,由于与 NNSF 的关联,我们会如您预期的那样违反 FK 约束。

标签: skyve

解决方案


在这种情况下,结果很简单 - 将代码移动到postSave()方法中。

但是,在这种情况下,我仍然需要计算是否需要在 中创建相关记录preSave(),即使我在postSave()

为此,您可以在文档中创建一个瞬态布尔属性(我选择的选项)并在preSave()(我选择的选项)期间存储 Boolean.TRUE,或者使用 Extension 类中的变量。


推荐阅读