orientdb - orientdb 顶点类中的多重继承?

标签 orientdb

我对 OrientDB 中的多重继承很好奇...假设我创建了以下顶点类:

CREATE CLASS A EXTENDS V
CREATE PROPERTY A.label STRING

CREATE CLASS B EXTENDS A
CREATE PROPERTY B.foo STRING

CREATE CLASS C EXTENDS A
CREATE PROPERTY C.bar STRING

B 类和 C 类继承了 A 的属性...所以如果我创建一个同时继承 B 和 C 的新类:

CREATE CLASS D EXTENDS B,C

我得到了一个具有以下属性的 D 类:

D.label
D.label
D.foo
D.bar

OrientDB 让这种情况发生而没有任何提示,但我不确定在查询中如何区分一个“标签”属性与另一个属性。

如果我尝试直接创建一个与现有属性同名的新属性,例如:

CREATE PROPERTY C.label STRING

我会得到一个错误,因为该属性已经存在。

那么,这是不是OrientDB多继承模型的bug? OrientDB 删除重复条目或抛出错误并禁止创建类是否有意义?

最佳答案

从 3.x 开始,如果多个类在继承层次结构中具有相同的属性,则 OrientDB 的多重继承保留一个属性。例如:

create class yClass
create property yClass.groupId STRING (MANDATRY TRUE)

create class zClass
create property zClass.groupId STRING (MANDATORY TRUE)

create class aClass extends yclass,zClass

aClass 有一个属性 'groupId'(UI 可能显示 2 位实际上有一个)

以上可以验证:

create class yClass
create property yClass.groupId STRING (MANDATRY TRUE)

create class zClass
create property zClass.groupId INTEGER (MANDATORY TRUE)

create class aClass extends yclass,zClass

这会导致错误。

com.orientechnologies.orient.core.exception.OSchemaException: Properties conflict detected: 'groupId (type=STRING)] vs [groupId (type=INTEGER)] DB name="testclient_com_GDB"

因此,保留一个属性;如果有多个父类(super class),那么它们的公共(public)属性也必须具有相同的数据类型。

关于orientdb - orientdb 顶点类中的多重继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40773989/

相关文章:

php - 为什么 orientDB 连接到 docker 的 localhost 被拒绝

node.js - 水线orientdb数据库连接超时

OrientDb DROP PROPERTY 不会删除记录中的属性值

javascript - 从 Orient DB 中的查询结果访问节点

java - 查询 OrientDB 中的嵌入列表

json - 如何以编程方式创建给定(json)模式的 OrientDB 数据库?

java - OrientDB SQL 查询到 Native Fluent API 调用

OrientDB:列出所有索引

docker - orientdb kubernetes准备就绪探针错误:gzip:无效的 header

java - OrientDB 中的类名和简称有什么区别?