代码之家  ›  专栏  ›  技术社区  ›  Coder Shark

@NodeEntity对象中的ID在SDN(Spring Data Neo4j)5.0.2中是否唯一(即不可回收)。释放?

  •  2
  • Coder Shark  · 技术社区  · 7 年前

    根据此处检索到的示例代码: 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指定为主键,@GenerateValue会在创建时生成该值(默认为增量Id生成)。

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

    我的问题是, 使用SDN 5.0.2。发布时,是否确认现在使用@Id@GeneratedValue可以保证Id是唯一的,并且不会被回收?

    谢谢

    2 回复  |  直到 7 年前
        1
  •  2
  •   cybersam    7 年前

    Neo4j现在提供 org.neo4j.ogm.id.UuidStrategy @GeneratedValue 注释。自从 UuidStrategy 返回生成的 UUID 字符串,这会导致带注释的变量包含UUID(而不是neo4j生成的可循环使用的长本机ID,这是默认值)。

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

        2
  •  1
  •   meistermeier    7 年前

    重用ID的语句仍然有效。

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

    从…起 OGM documentation

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