【问题标题】:Neo4J Cypher - Restrict Only One Relationship for a nodeNeo4J Cypher - 仅限制节点的一个关系
【发布时间】:2014-01-15 15:31:41
【问题描述】:

我是 Neo4J 的新手,我一直在尝试使用 Cypher 查询作为 Spring Neo4J 中的注释查询来构建社交网络应用程序。

如何使用密码命令/查询或任何配置限制用户节点与地址节点只有一种关系?基本上,我不希望用户有多个地址关系。

【问题讨论】:

  • 你还不能从 neo4j 方面做到这一点,尽管我认为你可以从 SpringDataNeo4j 方面做到这一点。我们将看看 Spring 家伙怎么说。
  • 在这种情况下可以以任何方式使用 Create Unique 语句吗?

标签: neo4j cypher spring-data-neo4j


【解决方案1】:

您可以像这样为您的用户实体建模:

@NodeEntity 
public class User {

@GraphId Long id;

@Indexed String name;

@RelatedTo(type="ADDRESS")
Address address;

}

然后 SDN 将确保从 UserAddress 之间只有一个 ADDRESS 关系。

【讨论】:

  • 酷.. 但是如果我尝试创建一个新的关系地址,新的关系会覆盖以前的地址吗?
  • 我尝试了同样的方法,但对我来说,它也是创建一个新关系而不是删除第一个关系然后创建,它将两个关系都保留在数据库中。
【解决方案2】:

您可以使用TransactionEventHandler 执行此操作。 TransactionEventHandler 是一个用 Java 编写并注册到您的 graphDatabaseService 实例的组件。在beforeCommit 中,您可以否决交易。

请注意,编写和使用 TransactionEventHandler 是 Neo4j 中的高级概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多