所以我试图创建然后使用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字段吗?如果是这样,有什么有效的方法可以确保数据仍然是唯一的?谢谢!
答案 0 :(得分:0)
id字段反映节点或关系的基础Neo4j graphId,该字段永远不会受用户控制。如果要一致地查找节点,请为标识符使用不同的字段,并为标签/属性创建索引以便快速查找。
就唯一性而言,您可以在标签/属性上创建唯一性约束,如果您想要一些自动生成的ID,那么您可以查看Graphaware's uuid plugin。