You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

InterSystems ObjectScript:能否在持久化类中创建非持久化属性且不随%Save()保存?

在InterSystems ObjectScript持久化类中创建非持久化属性的实现

当然可以!在InterSystems ObjectScript的持久化类体系里,你完全能创建不会随%Save()方法执行而被保存到数据库的非持久化属性,这在很多业务场景中都非常实用——比如存储临时计算结果、缓存中间处理数据,或者用来承载不需要持久化的辅助信息。

具体实现方法

只需要给目标属性添加[NotPersistent]关键字修饰即可,这个标记会告诉ObjectScript引擎:该属性不需要参与持久化流程。

代码示例

Class Sample.Person Extends %Persistent
{
    /// 持久化到数据库的姓名属性
    Property Name As %String;

    /// 持久化到数据库的年龄属性
    Property Age As %Integer;

    /// 非持久化属性:不会被%Save()保存
    Property FullNameDisplay As %String [ NotPersistent ];

    /// 计算并设置FullNameDisplay的方法
    Method GenerateDisplayText()
    {
        Set ..FullNameDisplay = ..Name _ ",年龄:"_ ..Age
    }
}

效果验证

当你创建这个类的实例并操作时:

  1. 给Name和Age赋值,调用GenerateDisplayText()生成FullNameDisplay的值
  2. 执行%Save()方法后,数据库中只会存储Name和Age字段,FullNameDisplay不会被写入
  3. 后续从数据库加载该实例时,FullNameDisplay会回到属性的默认值(比如空字符串),需要重新调用方法生成或手动赋值

补充说明

除了[NotPersistent],还有[Transient]关键字也能实现类似效果。不过[NotPersistent]的语义更聚焦于“不参与持久化”,而[Transient]还会影响对象的序列化行为。如果你的需求只是避免属性被保存到数据库,推荐使用[NotPersistent]来明确表达意图。

内容的提问来源于stack exchange,提问作者Vivek Ranjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:20:22