Quelqu'un peut-il expliquer la différence entre @GraphId
et @Index
annotation de org.neo4j.ogm.annotation
? Pour l'instant, après avoir lu les documents, il semble que @GraphId
est utilisé pour créer un identifiant pour la logique interne de Neo4j et les utilisateurs ne devraient pas s'en remettre, car il peut être réutilisé au fil du temps. Mais qu'en est-il de @Index
?Spring Data Neo4j @GraphId et @Index
Si je comprends bien, le principal avantage des bases de données à base de graphique est qu'une fois que nous connaissons le nœud/rapport à partir duquel commencer les choses deviennent faciles, car tout ce que nous devons faire est de traversent tout le graphique de ce départ nœud. Et l'indexation aide à le faire, non? Ainsi, nous pouvons écrire quelque chose comme START n = node:index_name(property_name = value)
et commencer immédiatement à exlorer le graphique du noeud indexé par la propriété 'property_name', n'est-ce pas?
Donc, considérez cette entité:
@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;
}
Comme vous pouvez le voir la propriété String name
est annotées avec @Index
. Comment puis-je écrire une requête Cypher pour commencer réellement à partir du nœud avec le nom = 'quelque chose'? Quel est le nom de l'index? Ou Spring Data Neo4j 4.2.0.RELEASE le figure-t-il lui-même lors de l'écriture juste MATCH (event:Event {name = 'somehting'} ...
?
@Repository
public interface EventRepository extends Neo4jRepository<Event, String>{
Event findOne(String eventName);
}
Ici, la classe repositry et comme vous pouvez le voir, je suis en utilisant String
comme le type de l'identifiant de l'entité du référentiel gère, donc je suppose que Spring utilise la propriété name
de classe d'événements pour générer une requête pour Event findOne(String eventName);
Oui, en effet. Regarde ça. Cela pourrait aider http://graphaware.com/neo4j/2015/01/16/neo4j-graph-model-design-labels-versus-indexed-properties.html – pvpkiran