skyve - 如何在 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 约束。
解决方案
在这种情况下,结果很简单 - 将代码移动到postSave()
方法中。
但是,在这种情况下,我仍然需要计算是否需要在 中创建相关记录preSave()
,即使我在postSave()
为此,您可以在文档中创建一个瞬态布尔属性(我选择的选项)并在preSave()
(我选择的选项)期间存储 Boolean.TRUE,或者使用 Extension 类中的变量。
推荐阅读
- python - 如何在 pytest 中迭代 test_function 以获得多个值?
- html - 以不同的方式显示不同的图像当鼠标悬停在不同的选项卡上时
- node.js - Firestore 文档查询
- python - Pandas 如何打印某一列
- json - 根据值过滤 JSON
- javascript - 使用 React-Icon 库将鼠标悬停在图标上时显示文本
- tensorflow - 使用tensorflow和keras在python中用CNN替换MLP代码
- amazon-web-services - postmap: warning: database /etc/postfix/sasl_passwd.db is older than source file /etc/postfix/sasl_passwd
- ios - 如何更新 UWP appxupload 包而不重建以针对多个环境
- java - Returning Map from JDBC template execution