当使用SDN 4

时间:2015-10-29 17:58:27

标签: neo4j spring-data-neo4j-4 neo4j-ogm

我有一个使用Spring Data Neo4j 4(4.0.0.RELEASE和Neo4j社区服务器2.2.5)的Spring Boot应用程序。我使用neo4j-ogm库的最新快照版本(1.1.4-SNAPSHOT)作为SDN 4的依赖项。当存在多个关系时,应用程序和现在的集成测试不会像我期望的那样(不使用关系实体)在相同的两个节点实体类之间按关系类型区分。

失败的集成测试的两个节点实体类是:

@NodeEntity
public class TypeD {

    @GraphId
    private Long id;

    @Relationship(type = "ONE", direction = Relationship.OUTGOING)
    private TypeE one;

    @Relationship(type = "MANY", direction = Relationship.OUTGOING)
    private Set<TypeE> many;

    private String identifier;
    ...


@NodeEntity
public class TypeE {

    @GraphId
    private Long id;

    @Relationship(type = "ONE", direction = Relationship.INCOMING)
    private Set<TypeD> firstColl;

    @Relationship(type = "MANY", direction = Relationship.INCOMING)
    private Set<TypeD> secondColl;
    ...

集成测试从两个节点开始,这两个节点已存在于数据存储区中

starting datastore content

    // Find the TypeE node using its String identifier
    TypeE e = typeERepository.findByIdentifier(EEE);
    assertNotNull(e);
    assertEquals(EEE, e.getIdentifier());

    // Create a new TypeD object
    TypeD d = new TypeD();
    // and create a relationship between d and the TypeE node
    d.setOne(e);
    d.setIdentifier(TWO);
    // note that the e object is NOT added to the many collection 
    // and save d
    TypeD savedD = typeDRepository.save(d);

我原本预计会有结果

expected datastore content

但实际上

actual datastore content

出乎意料地 - 至少对我来说 - 在创建和保存新对象之前存在的节点之间建立了新的关系。

当从多个(EEE)&lt; - [:ONE] - (d)数据存储区中的关系开始时,每个(d)在创建新的TypeD对象时获得与(EEE)的新[:MANY]关系保存。

其中一个真正的应用场景是用户所有权和与其他项目的许可关系。因此TypeE将是User,TypeD是拥有或许可的Item。用户可以拥有或许可多个相同类型的项目。一个项目只能拥有一个所有者,但它可以被许可给多个用户。因此,测试中的关系将是ONE =所有者和MANY =被许可人。

这里有错误或有人见过类似的吗?

0 个答案:

没有答案