提问者:小点点

neo4j中的节点之间不能添加多个关系


我正在尝试使用Neo4J对社交网络进行建模。这要求一个用户可以与另一个用户建立多种关系。当我尝试持久化这些关系时,只会存储一个。例如,这是我做的测试单元:

@Test
public void testFindConnections() {

    Id id1 = new Id();
    id1.setId("first-node");

    Id id2 = new Id();
    id2.setId("second-node");
    idService.save(id2);

    id1.connectedTo(id2, "first-rel");
    id1.connectedTo(id2, "second-rel");

    idService.save(id1);

    for (Id im : idService.findAll()) {
        System.out.println("-" + im.getId());
        if (im.getConnections().size() > 0) {
            for (ConnectionType ite : im.getConnections()) {
                System.out
                        .println("--" + ite.getId() + " " + ite.getType());
            }
        }
    }
}

这应该输出:

-first-node
--0 first-rel
--1 second-rel
-second-node
--0 first-rel
--1 second-rel

但是,它输出:

-first-node
--0 first-rel
-second-node
--0 first-rel

这是我的节点实体:

@NodeEntity
public class Id {

    @GraphId
    Long nodeId;
    @Indexed(unique = false)
    String id;

    @Fetch
    @RelatedToVia(direction=Direction.BOTH)
    Collection<ConnectionType> connections = new HashSet<ConnectionType>();
}

和我的关系实体:

@RelationshipEntity(type = "CONNECTED_TO")
public class ConnectionType {

    @GraphId Long id;
    @StartNode Id fromUser;
    @EndNode Id toUser;

    String type;
}

问题可能是什么?有没有其他方法来模拟节点之间的几种关系?


共1个答案

匿名用户

这不是Neo4j的缺点,而是Spring Data Neo4j的限制。

通常,如果你有不同类型的关系,实际上选择不同的关系类型也是有意义的,而不是为此使用关系属性。

CONNECTED_TO也非常通用。

Id也是一个非常通用的类,不应该是User或类似的东西吗?

FRIENDCOLLEAGUE等会更有意义。

也就是说,如果你想留在你的模型上,你可以使用

模板。创建(实体1、实体2、类型、属性、true)之间的关系

true代表允许重复。

或者为2种类型的关系使用两种不同的目标类型,并使用

@相关到(强制目标类型=true)