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保存节点的主要内容,如果未能解决你的问题,请参考以下文章