继承

和许多对象-关系映射工具不同,OrientDB不是按照不同的类分割文档。每一个文档都存在于一个或者多个和它的类相关的集群中。当你针对一个拥有子类的类进行查询时,OrientDB会搜索目标类及其所有子类。

在模式中声明继承

在开发应用时,牢记OrientDB需要知道类之间的继承关系。这是一个抽象的概念应用到POJO'sDocuments

例如,

OClass account = database.getMetadata().getSchema().createClass("Account");
OClass company = database.getMetadata().getSchema().createClass("Company").setSuperClass(account);

使用多态查询

默认的,OrientDB把所有的查询都当做多态。利用上面的例子,你可以运行下面的查询:

orientdb> SELECT FROM Account WHERE name.toUpperCase() = 'GOOGLE'

这个查询会返回类AccountCompany属性名称匹配Google的所有实例。

继承是如何工作的

来看一个例子,你有三个类,下面列举出来,括号中是簇的标示。

Account(10) <|--- Company (13) <|--- OrientTechnologiesGroup (27)

默认的,OrientDB会给每个类创建一个单独的簇。这表示类OClass的属性defaultClusterId就是默认的簇。然而, 类OClass有个属性clusterIds, (int[]), 包含了所有存储了这个类记录的簇。clusterIdsdefaultClusterId默认相同。

当你针对一个类执行查询时,OrientDB会限制结果集在clusterIds属性。例如

orientdb> SELECT FROM Account WHERE name.toUpperCase() = 'GOOGLE'

因为指定了基类Account,这个查询返回所有三个类中name属性值为GOOGLE的记录。对于类Account, OrientDB会查询簇 10, 1317, 顺着模式的继承关系。