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 中没有合并功能。您可以执行以下任一操作 -
- 设置唯一约束(无论如何你都应该有),然后处理一个ConstraintViolatedException
或
- 按名称加载实体,如果存在则使用它,如果不存在则创建一个新实体。
我有一个如下所示的节点对象:
@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 中没有合并功能。您可以执行以下任一操作 -
- 设置唯一约束(无论如何你都应该有),然后处理一个ConstraintViolatedException
或
- 按名称加载实体,如果存在则使用它,如果不存在则创建一个新实体。