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

时间:2018-02-28 22:26:25

标签: spring spring-boot neo4j spring-data-neo4j

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

1 个答案:

答案 0 :(得分:0)

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

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