2

根据此处检索到的示例代码:http ://projects.spring.io/spring-data-neo4j/

可以使用以下代码创建节点实体:

@NodeEntity
public class Movie {

  @Id @GeneratedValue Long id;
  String title;

  Person director;

  @Relationship(type="ACTS_IN", direction = Relationship.INCOMING)
  Set<Person> actors;

  @Relationship(type = "RATED")
  List<Rating> ratings;
}

请注意 id 属性上的 @Id 和 @GeneratedValue 注释。

据我了解,@Id 将属性 id 指定为主键,@GenerateValue 导致在创建时生成此值(默认为增量 id 生成)。

在早期版本的 SDN 中,建议不要使用内部 Neo4j id,因为它们是偏移量,因此可能会被回收。

我的问题是,对于 SDN 5.0.2.RELEASE,是否确认现在使用 @Id @GeneratedValue 可以保证 id 是唯一的并且不会被回收?

谢谢

4

2 回答 2

2

Neo4j 现在提供了org.neo4j.ogm.id.UuidStrategy类作为@GeneratedValue注释的可选参数。由于UuidStrategy返回一个生成的UUID字符串,这会导致带注释的变量包含一个 UUID(而不是 neo4j 生成的可回收 Long 本机 ID,这是默认值)。

org.neo4j.ogm.domain.annotations.ids.ValidAnnotations单元测试有几个关于如何使用的示例UuidStrategy用于节点和关系。(它还显示了自定义的使用IdStrategy,如果您想编写自己的。)

于 2018-01-22T23:48:47.060 回答
1

id 被重用的声明仍然有效。

不要依赖此 ID 来运行长时间运行的应用程序。Neo4j 将重用已删除的节点 ID。建议用户为其域对象提供自己的唯一标识符(或使用 UUID)。

来自OGM 文档

在应用程序中引用内部技术 ID 基本上是个坏主意。

于 2018-01-22T22:30:09.373 回答