gpt4 book ai didi

java - Spring Data Neo4j @GraphId 和 @Index

转载 作者:行者123 更新时间:2023-12-01 20:52:14 25 4
gpt4 key购买 nike

任何人都可以解释一下 org.neo4j.ogm.annotation 中的 @GraphId@Index 注释之间的区别吗?目前,在阅读文档后,似乎 @GraphId 用于为 Neo4j 内部逻辑创建标识符,用户不应该依赖它,因为它可以随着时间的推移而重复使用。但是@Index呢?

据我了解,基于图的数据库的主要优点是,一旦我们知道从哪个节点/关系开始,事情就会变得容易,因为我们需要做的只是从该起始节点遍历图。索引有助于做到这一点,对吧?因此,我们可以编写类似 START n = node:index_name(property_name = value) 的内容,并立即开始通过“property_name”属性从 inode 探索图形,对吗?

所以,考虑这个实体:

@ToString
@NodeEntity(label = "Event")
@NoArgsConstructor
public class Event{

public Event(String eventName, LocalDate dateTime){
this.name = eventName;
this.date = dateTime;
}

public Event(Long id, String eventName, LocalDate dateTime){
this(eventName, dateTime);
this.id = id;
}

@Getter
@GraphId
private Long id;

@Getter
@Index(unique = true, primary = true)
@Property(name = "name")
private String name;

@Getter
@Property(name = "date")
@Convert(DateConverter.class)
private LocalDate date;
}

如您所见,String name 属性使用 @Index 进行注释。如何编写 Cypher 查询以实际从 name = 'something' 的节点开始?索引名称是什么?或者 Spring Data Neo4j 4.2.0.RELEASE 在编写 MATCH (event:Event {name = 'somehting'} ... 时会自行计算?

@Repository
public interface EventRepository extends Neo4jRepository<Event, String>{

Event findOne(String eventName);

}

这里是存储库类,您可能会看到我使用 String 作为存储库管理的实体 id 的类型,所以我假设 Spring 使用 name 属性的 Event 类来生成 Event findOne(String eventName);

的查询

最佳答案

如果您熟悉 spring-data-mongodb 或 spring-data-jpa 中的 @Index,@Index 与 @Indexed 类似。基本上它索引了该字段(除其他外),这使得它可以非常快地搜索该字段。
关于你的存储库方法,它应该这样命名

Event findByName(String eventName);

关于java - Spring Data Neo4j @GraphId 和 @Index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com