我有一个代码负责在两个节点之间创建新的关系。 首先,按属性(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个。
感谢您提供任何信息