Neo4j在添加新关系时自行删除现有关系

时间:2017-05-02 14:40:38

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

我有一个代码负责在两个节点之间创建新的关系。 首先,按属性(pk)获取两个节点,检查这些节点之间是否存在这种关系,如果不存在,则创建一个。

public void createNeo4jGraphLink(@Nonnull final String childPk, @Nonnull final String parentPk) {
    final UUID measureId = measureService.startMeasure(MeasureService.MeasureEvent.NEO_PERSIST);

    Node child = neoRepository.findOneByPk(childPk);
    Node parent = neoRepository.findOneByPk(parentPk);

    checkIfLinkingAllowed(child, parent);

    if (child.getPartOf() == null || !child.getPartOf().contains(parent)) {
        if (child.getPartOf() == null) {
            child.setPartOf(new HashSet<>());
        }
        child.getPartOf().add(parent);
        neoRepository.save(child);
    }

    measureService.fixMeasure(MeasureService.MeasureEvent.NEO_PERSIST, measureId);
}

我可以看到db中的关系数量上升,但有一瞬间它急剧下降等等。什么原因会导致这种行为?我尝试使用@Transactional注释,尝试传播和隔离事务,并尝试没有事务,但这一切都行不通。顺便说一句,我使用Spring Data Neo4j存储库。 Spring Boot 1.4.4.RELEASE。 子和父实体的类型是“节点”,它被定义为以下

@NodeEntity(label = "node")
public class Node {

    private String pk = UUID.randomUUID().toString();

    @JsonIgnore
    private Long id;

    private String name;

    private Set<Node> partOf;

    private String type;

    public Node() {
    }

    @Property(name = "pk")
    public String getPk() {
        return pk;
    }

    public void setPk(String pk) {
        this.pk = pk;
    }

    @GraphId(name = "id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Property(name = "type")
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Property(name = "name")
    public String getName() {
        return name;
    }

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

    @Relationship(type = "PART_OF", direction = Relationship.OUTGOING)
    public Set<Node> getPartOf() {
        return partOf;
    }

    public void setPartOf(Set<Node> partOf) {
        this.partOf = partOf;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Node node = (Node) o;

        if (!pk.equals(node.pk)) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return pk.hashCode();
    }
}

我执行1800次关系添加,但结果有62个关系。代码不会抛出任何错误。在处理这1800个请求时,我可以在数据库中看到有任意数量的关系(少于1800),但结果只有62个。

感谢您提供任何信息

0 个答案:

没有答案