Spring数据中的节点标识符Neo4j

时间:2016-04-26 02:05:12

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

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

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

名称是此对象的自然标识符。我想确保为name的每个值创建一个Node。使用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);

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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