当前位置:网站首页>属性关键字OnDelete,Private,ReadOnly,Required
属性关键字OnDelete,Private,ReadOnly,Required
2022-07-07 12:38:00 【用户7741497】
第105章 属性关键字 - OnDelete
指定删除相关对象时在当前表中采取的操作。此关键字仅适用于将基数Cardinality
指定为“父”或“一”的关系属性。它的使用在所有其他上下文中都是无效的。
用法
要指定删除相关对象时在当前表中采取的操作,请使用以下语法:
Relationship relname As classname [ Cardinality = cardinality, Inverse = inverse, OnDelete = ondelete ];
其中ondelete
是以下值之一。在本讨论中,相关记录是属于关系另一方的记录或对象,引用记录是关系这一方的记录或对象。
cascade
级联—删除相关记录时,也会删除该表中的引用记录。noaction
无操作—当试图删除相关记录时,尝试会失败。setdefault
—删除相关记录时,该表中的引用记录将被设置为其默认值。setnull
—删除相关记录时,该表中的引用记录将被设置为null
。
详解
此关键字定义了在关系的另一端删除记录时发生的引用操作。
默认
如果忽略此关键字,则:
- 对于
Cardinality
基数为父的关系,OnDelete
是级联的。也就是说,当删除父记录时,默认情况下,关联的子记录将被删除。 - 对于基数为1的关系,
OnDelete
为noaction
。也就是说,当试图删除“一个”记录时,默认情况下,如果另一个表有任何指向它的记录,尝试就会失败。
示例
Class MyApp.Employee Extends %Persistent {
...
Relationship Employer As MyApp.Company [ Cardinality = one, Inverse = Employees, OnDelete = cascade ];
}
这个例子显示了公司和员工之间的一对多关系。 如图所示,Cardinality
表示公司是关系的“one”
,而OnDelete
表示删除公司对其员工的影响。 由于OnDelete
的值是cascade
,当删除一个公司时,它的效果是级联的,员工也会被删除。
第106章 属性关键字 - Private
指定属性是否私有(只能由该类或其子类的方法使用)。
用法
要指定属性为私有,请使用以下语法:
Property name As classname [ Private ];
否则,忽略该关键字或将Not
放在该关键字之前。
详解
私有类成员只能由该类(或其子类)的方法使用。
在目录信息中不显示私有属性,并且不是由SELECT *
查询返回的。 但是,可以在SQL查询中显式地引用和使用私有属性。
子类继承Private
关键字的值,不能重写它。
在IRIS中,私有属性总是被继承的,并且对定义属性的类的子类可见;其他语言经常调用这些受保护的属性。
默认
如果省略此关键字,则此属性不是私有的。
第107章 属性关键字 - ReadOnly
指定属性是只读的,这限制了其值的设置方式。
用法
要指定属性为只读,请使用以下语法:
Property name As classname [ ReadOnly ];
否则,省略此关键字或将单词Not
放在关键字的前面。
重要提示:不要在集合属性中使用ReadOnly
关键字。
详解
此关键字指定不能通过使用对象引用来设置该属性的值。如果使用对象引用设置只读属性的值,例如:
set oref.Name = "newvalue"
那么在运行时会出现<CANNOT SET THIS PROPERTY>
错误。
同样,当属性被定义为只读时,相应的SQL表中的字段也被定义为只读。不能通过SQL语句显式插入或更新只读字段。尝试这样做将导致SQL错误,SQLCODE
为-138
。
可以通过以下方式指定只读属性的值:
- 通过
InitialExpression
关键字。 - 通过
SQLComputeCode
关键字。
请注意,这些技术都有特定的限制。
注意
如果属性被标记为只读和必需 required
,请注意对象访问和SQL访问之间的以下行为差异:
- 当保存对象时, IRIS不会验证属性。这意味着 IRIS忽略了该属性的
Required
关键字。 - 当插入或更新记录时, IRIS会属性的
Required
关键字。
默认
如果省略此关键字,则属性不是只读的。
第108章 属性关键字 - Required
对于持久性类,指定属性的值必须先给定一个值,然后才能存储到磁盘。对于启用了XML
的类,指定属性映射到的元素是必需的。
用法
要指定属性是必需required
的,请使用以下语法:
Property name As classname [ Required ];
否则,省略此关键字或将单词Not
放在关键字的前面。
详解
对于持久类,此关键字指定在包含对象可以存储到磁盘之前,必须给属性一个值;如果属性没有值,则会发生错误。
- 如果属性的类型为
%Stream
,则流不能为空流。也就是说,如果%IsNull()
方法返回0,则认为流属性具有值。 - 对于扩展
%XML.Adaptor
的类,此关键字影响相应的XML
架构。如果属性被标记为REQUIRED
,则模式中的相应元素没有minOccurs=“0”
,因此被认为是必需的。
在子类中,可以将可选属性标记为必需,但不能反之亦然。
注意
如果属性被标记为只读和必需 required
,请注意对象访问和SQL访问之间的以下行为差异:
- 当保存对象时, IRIS不会验证属性。这意味着 IRIS忽略了该属性的
Required
关键字。 - 当插入或更新记录时, IRIS会属性的
Required
关键字。
默认
如果省略此关键字,则不需要该属性。
边栏推荐
- 请问,如图,pyhon云函数提示使用了 pymysql模块,这个是怎么回事?
- 2022年13个UX/UI/UE最佳创意灵感网站
- Demis hassabis talks about alphafold's future goals
- oracle 非自动提交解决
- Data connection mode in low code platform (Part 2)
- Ian Goodfellow, the inventor of Gan, officially joined deepmind as research scientist
- 最长上升子序列模型 AcWing 1014. 登山
- 内部排序——插入排序
- IP address home location query full version
- Leetcode——剑指 Offer 05. 替换空格
猜你喜欢
通过 iValueConverter 给datagrid 的背景颜色 动态赋值
UML 状态图
leetcode:648. 单词替换【字典树板子 + 寻找若干前缀中的最短符合前缀】
gvim【三】【_vimrc配置】
Reverse non return to zero code, Manchester code and differential Manchester code of common digital signal coding
【立体匹配论文阅读】【三】INTS
2022PAGC 金帆奖 | 融云荣膺「年度杰出产品技术服务商」
Mmkv use and principle
Codes de non - retour à zéro inversés, codes Manchester et codes Manchester différentiels couramment utilisés pour le codage des signaux numériques
UML sequence diagram (sequence diagram)
随机推荐
Demis Hassabis谈AlphaFold未来目标
[untitled]
Mrs offline data analysis: process OBS data through Flink job
ndk初学习(一)
Selenium库
When FC connects to the database, do you have to use a custom domain name to access it outside?
docker部署oracle
数据湖(九):Iceberg特点详述和数据类型
Substance painter notes: settings for multi display and multi-resolution displays
The longest ascending subsequence model acwing 1012 Sister cities
Cesium 已知一点经纬度和距离求另一个点的经纬度
Equipment failure prediction machine failure early warning mechanical equipment vibration monitoring machine failure early warning CNC vibration wireless monitoring equipment abnormal early warning
杭电oj2092 整数解
ES日志报错赏析-- allow delete
electron remote 报错
Ascend 910实现Tensorflow1.15实现LeNet网络的minist手写数字识别
Mmkv use and principle
Oracle Linux 9.0 正式发布
Démontage de la fonction du système multi - Merchant Mall 01 - architecture du produit
Cvpr2022 | backdoor attack based on frequency injection in medical image analysis