Spring 数据 Neo4j 中的节点标识符

Node identifiers in Spring data Neo4j

我有一个如下所示的节点对象:

@NodeEntity
public class Title {
    private Long id;
    private String name;
    public void setName(String name){
        this.name=name;
    }
}

名称是该对象的自然标识符。我想确保为名称的每个值创建一个节点。使用 Spring Data Neo4j 执行此操作的推荐方法是什么?我尝试将此逻辑添加到 setter 中,如下所示:

public void setName(String name){
    this.name=name;
    this.id = new Long(name.hashCode());
}

但是当我这样做时,根本没有创建节点。我正在使用 Neo4jTemplate 来保存这个对象:

Title t = new Title();
t.setName("blah");
neo4jTemplate.save(t);

id由neo4j提供,不能自行分配。 SDN(更具体地说,OGM)没有 API 来处理数据库管理;你必须自己做。我不确定我是否完全理解您要实现的目标,但是在标题字段上设置唯一约束是个好主意。参见 http://neo4j.com/docs/stable/query-constraints.html#query-constraints-unique-nodes

SDN 4.x 中没有合并功能。您可以执行以下任一操作 -

  1. 设置唯一约束(无论如何你都应该有),然后处理一个ConstraintViolatedException

  1. 按名称加载实体,如果存在则使用它,如果不存在则创建一个新实体。