【问题标题】:Neo4j-Ogm for dynamic domain object modelNeo4j-Ogm 用于动态领域对象模型
【发布时间】:2015-11-27 11:09:19
【问题描述】:

我已经开始在我的应用程序中使用 Neo4j-ogm,它就像固定对象域模型的魅力一样。当我知道哪个节点类型连接到另一个具有已知类型的节点时 - 它可以很容易地映射。 但是,在我看来,Neo4j 图形数据库的多功能性还在于能够使用非类型化(或动态)域模型,并且我在理解如何使用 Neo4j-ogm 实现它时遇到了概念问题。

让我用一个例子来描述我的问题。

我有域对象,例如:消息和功能。其中 Message 可以具有多个功能,并且 Feature 可以是许多消息的一部分。用 Neo4j-ogm 映射是完全可以的。

如果用户想要将消息关联到某个 Task 节点类型或将其引用到某个 Contact 节点类型怎么办?在我的应用程序中,可以在各种类型的节点之间建立大量(但有限)的连接集。所以我希望能够从特定节点获取所有类型的连接,无论这种连接类型或 endNode 类型如何?

当然,我可以使用 cypher 来创建这样的连接:

MATCH ($2911) WHERE id($2911)={$2911} MATCH ($2912) WHERE id($2912)={$2912} MERGE ($2911)-[_0:`part_of` {$aid} ]->($2912) RETURN id(_0) AS _0

但是当我开始这样做时 - 我需要一种方法来自己将这个查询的结果与关系实体进行转换。

有没有使用 Neo4j-ogm 的优雅方式来做到这一点。可能有可能创建一个全面的类型层次结构或允许将 Neo4j-ogm 一起用于固定和动态域对象模型的东西。

提前谢谢你。

【问题讨论】:

    标签: neo4j neo4j-ogm


    【解决方案1】:

    Neo4j OGM 支持固定类型的层次结构,因此如果您能够在这样的层次结构中表示您的域,您应该能够从单个实体获取所有连接。这意味着末端节点也必须在此层次结构中表示。

    当前版本不支持运行时多态性 - 不过有待讨论,因此取决于它的进展情况,它可能会在未来的版本中使用。

    【讨论】:

    • 感谢您的回答。尽管如此,我还是决定坚持使用 Neo4j-ogm,因为它是一个非常好的库,并且比我的访问 Neo4j 的工具更先进。为了解决固定域的问题,我计划使用 Cypher 查询从任何节点获取未映射的连接。
    猜你喜欢
    • 2012-12-18
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多