文章目录
- 第四十章 持久对象和SQL - Object IDs
- Object IDs
- `ID`是如何确定的
- 访问 `ID`
第四十章 持久对象和SQL - Object IDs
Object IDs
每个对象在其所属的每个范围内都有一个唯一的 ID。在大多数情况下,使用此 ID 来处理对象。此 ID 是类中 %Persistent 的以下常用方法的参数:
%DeleteId()%ExistsId()%OpenId()
该类还有其他使用 ID 的方法。
ID是如何确定的
当首次保存对象时,会分配 ID 值。该任务是永久性的;无法更改对象的 ID。当删除或更改其他对象时,不会为对象分配新的 ID。
任何ID在其范围内都是唯一的。
对象的 ID 确定如下:
- 对于大多数类,默认情况下,
ID是在保存该类的对象时按顺序分配的整数。 - 对于在父子关系中用作子类的类,
ID的构成如下:
parentID||childID
其中,parentID 是父对象的 ID,childID 是子对象在未在父子关系中使用时将收到的 ID。例子:
104||3
该 ID 是已保存的第三个子 ID,其父 ID 在其自己的范围内具有 ID 104。
- 如果该类具有
IdKey类型的索引并且该索引位于特定属性上,则该属性值将用作ID。
SKU-447
此外,属性值无法更改。
- 如果该类具有
IdKey类型的索引,并且该索引位于多个属性上,则这些属性值将连接起来形成ID。例如:
CATEGORY12||SUBCATEGORYA
.
此外,这些属性值无法更改。
访问 ID
要访问对象的 ID 值,请使用该对象从 %Persistent继承的 %Id() 实例方法。
SAMPLES>set person=##class(Sample.Person).%OpenId(2)
SAMPLES>write person.%Id()
2
>>> person = iris.cls("Sample.Person")._OpenId(2)
>>> print(person._Id())
2
在 SQL 中,对象的 ID 值可用作名为 %Id 的伪字段。请注意,当在管理门户中浏览表时,%Id 伪字段会显示标题 ID:

尽管有这个标题,伪字段的名称是 %Id。









![排序---P1012 [NOIP1998 提高组] 拼数](https://img-blog.csdnimg.cn/6a4a35c6eaaf4767807c6c4c1b1f8c15.png)









![[中间件~大厂面试题] 腾讯三面,40亿的QQ号如何去重](https://img-blog.csdnimg.cn/556212602ecf49d79aa1af1a91b80033.png)