【问题标题】:How to map a many-to-many relantionship in OrientDB如何在 OrientDB 中映射多对多关系
【发布时间】:2014-06-14 13:07:49
【问题描述】:

我从 OrientDB 开始,我掌握了正确的基础知识。但我不知道如何以一种不需要我在删除记录时进行大量完整性检查的方式映射多对多关系。

我正在使用一个对象数据库 (ODatabaseObjectTx),我正在尝试映射这个简单的关系:

人物 角色

一个人可以有多个角色,一个角色可以分配给多个人。 N 到 M 的关系。

我的人物类:

public class Person {
    private String name;

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我的角色类:

public class Role {
    private String name;

    public Role() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

现在我不知道是否必须在 User 类中放置 Set<Role> 或在 Role 类中放置 Set<User> 才能建立链接。无论哪种方式,如果我从一条记录中删除一条记录,我必须检查另一条记录的链接以避免null 引用。对我来说,将Set<Role> 放在User 类中会更方便。

在 RMDBS 中,您可以只创建一个外键并添加一些级联规则,OrientDB 是否提供类似的功能来节省我手动执行此操作的麻烦?

如果最终我必须手动执行此操作,我应该采取什么策略?删除记录时是否应该全面检查其他集群?我应该离开nulls 并在看到它们时处理它们吗?我是否应该创建双重引用(在User 中同时拥有Set<Role> 和在Role 中的Set<User>,我想这会以更多空间和复杂性为代价带来更快的删除)?

【问题讨论】:

    标签: java orientdb


    【解决方案1】:

    【讨论】:

    • 我试过了,它会删除整个记录,而不仅仅是引用。例如,假设我在Set<Roles> 关系中的User 类中有该映射,如果我删除一个Role,那么所有拥有该Role 的用户也将被删除,而不仅仅是删除@ 中的引用我的Userinstances 中的 987654326@。看来我真正需要的是 CascadeType.REFRESH。
    猜你喜欢
    • 2013-08-25
    • 2014-08-17
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多