第三十八章 持久对象和SQL - 持久类的特殊选项
持久类的特殊选项
在 IRIS
中,所有持久类都在中扩展 %Library.Persistent
(也称为 %Persistent
)。此类为 IRIS
中的对象 SQL
对应关系提供了大部分框架。在持久类中,有如下选项:
- 能够使用方法打开、保存和删除对象。
当打开持久对象时,可以指定并发锁定的程度,因为持久对象可能会被多个用户或多个进程使用。
当打开对象实例并引用对象值属性时,系统也会自动打开该对象。此过程称为混合。然后也可以使用该对象。在下面的示例中,当打开 Sample.Person
对象时,会混合相应的 Sample.Address
对象:
Set person=##class(Sample.Person).%OpenId(10)
Set person.Name="Andrew Park"
Set person.Address.City="Birmingham"
Do person.%Save()
import iris
person=iris.cls("Sample.Person")._OpenId(10)
person.Name="Andrew Park"
person.Address.City="Birmingham"
person._Save()
类似地,当你保存一个对象时,系统也会自动保存它的所有对象值属性;这称为深度保存。可以选择执行浅保存。
- 能够使用默认查询(范围查询),该查询是包含此类对象数据的
SQL
结果集。默认情况下,范围查询返回范围内的现有 ID。可以对其进行修改以返回更多列。
在此类(或其他类)中,可以定义其他查询。
- 能够定义作为外键映射到
SQL
的类之间的关系。
关系是一种特殊类型的对象值属性,它定义两个或多个对象实例如何相互关联。每个关系都是双面的:对于每个关系定义,都有一个相应的逆关系定义另一面。 IRIS
自动强制执行数据的引用完整性,一侧的任何操作在另一侧立即可见。关系自动管理它们在内存中和磁盘上的行为。它们还提供了优于对象集合的扩展性和并发性(请参阅集合类)。
- 能够定义外键。在实践中,可以添加外键来向现有应用程序添加引用完整性约束。对于新应用程序,定义关系更简单。
- 能够在这些类中定义索引。
索引提供了一种优化跨持久类实例的搜索的机制;它们定义了与某个类相关的常用请求数据的特定排序子集。它们对于减少性能关键型搜索的开销非常有帮助。
索引可以根据属于其类别的一个或多个属性进行排序。这使可以对返回结果的顺序进行大量特定控制。
此外,索引还可以存储基于排序属性的查询经常请求的附加数据。通过包含附加数据作为索引的一部分,可以极大地提高使用索引的查询的性能;当查询使用索引生成其结果集时,它可以在不访问主数据存储设施的情况下执行此操作。
- 能够在这些类中定义触发器来控制插入、修改或删除行时发生的情况。
- 能够将方法和类查询映射为
SQL
存储过程。 - 能够微调
SQL
的映射(例如,指定SQL
查询中看到的表和列名称)。 - 能够微调存储对象数据的
Global
的结构。
注意:无法在 Python
中定义关系、外键或索引。
网友评论