Spring Neo4j:无法使用id保存节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Neo4j:无法使用id保存节点相关的知识,希望对你有一定的参考价值。

所以我试图创建然后用Spring删除Neo4j中的节点

@Data
@NodeEntity
public class Tweet {
    @Id
    @GeneratedValue
    private Long id;
    private String text;
    @Relationship(type = "POST", direction = Relationship.INCOMING)
    private Person person;
}

@Repository
public interface TweetRepository extends Neo4jRepository<Tweet, Long> {}

@Test
public void testCreateDelete() {
    Tweet tweet = new Tweet();
    tweet.setId(123L);
    tweet.setText("example");
    tweetRepository.save(tweet);
    Optional<Tweet> dbTweet = tweetRepository.findById(tweet.getId());
    if (!dbTweet.isPresent()) fail("save failed");
    tweetRepository.deleteById(tweet.getId());
    dbTweet = tweetRepository.findById(tweet.getId());
    if (dbTweet.isPresent()) fail("delete failed");
}

问题是,如果我调用tweet.setId(...)[保存失败],则单元测试将失败,如果我发表评论则成功。我真的需要设置id字段以避免重复数据。禁止自己设置id字段吗?如果是这样,有什么有效的方法可以确保数据仍然是唯一的?谢谢!

答案

id字段反映节点或关系的基础Neo4j graphId,并且该字段永远不受用户控制。如果要一致地查找节点,请为标识符使用不同的字段,并为标签/属性创建索引以进行快速查找。

就唯一性而言,您可以在label / property上创建唯一性约束,如果您想要一些自动生成的ID,那么您可以查看Graphaware's uuid plugin

以上是关于Spring Neo4j:无法使用id保存节点的主要内容,如果未能解决你的问题,请参考以下文章

Neo4J 和 Spring 返回空关系

节点导入neo4j数据库后,节点显示的都是数字ID,怎么让他显示中文?

如何使用Spring Boot获取节点链(Neo4j)

一个简单用例上的 Neo4j 节点持久性问题

转发:Spring Boot 访问Neo4j

Neo4j Spring Data NodeEntity 使用字符串作为@id