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

问题描述 投票:0回答:1

所以我试图创建然后用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字段吗?如果是这样,有什么有效的方法可以确保数据仍然是唯一的?谢谢!

spring spring-boot neo4j spring-data-neo4j
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.