2016-03-29 9 views
0

Ich habe die folgenden (Projekt, Benutzer, Aufgabe) Domain-Objekte. Wie kann ich Entity mit bestimmten verwandten Objekten über Spring Data Neo4j 4 (SDN4) holen? Zum Beispiel möchte ich ein Projekt mit verwandten Aufgaben holen, aber ohne Benutzer. Dieses Beispiel funktioniert nicht. Das Definieren von depth in neo4jTemplate.load Methode ist nicht für mich geeignet, da es Benutzerobjekte erhält.Wie kann ich Entity mit bestimmten verwandten Objekten über Spring Data holen Neo4j 4

public Project findProjectWithTasks(Long projectId){ 
    Project project = neo4jTemplate.load(Project.class, projectId, 0); 
    /* 
     project.id  <- correct 
     project.name <- correct 
     project.tasks <- null, but in previous versions of Spring Data Neo4j I had empty entities with id 
    */ 

    Collection<Task> tasks = neo4jTemplate.loadAll(project.getTasks()); // <- returns null, because project.getTasks() is null 

    return project; 
} 

// ----------

@NodeEntity 
class Project { 
    @GraphId 
    private Long id; 

    private String name; 

    @Relationship(direction = Relationship.OUTGOING, type = "PROJECT_TASK") 
    private Set<Task> tasks; 

    @Relationship(direction = Relationship.OUTGOING, type = "PROJECT_USER") 
    private Set<User> users; 
} 

@NodeEntity 
class Task { 
    @GraphId 
    private Long id; 

    private String name; 

    @Relationship(direction = Relationship.INCOMING, type = "PROJECT_TASK") 
    private Project project; 

    @Relationship(direction = Relationship.OUTGOING, type = "TASK_USER_ASSIGNED") 
    private User assignedTo; 
} 

@NodeEntity 
class User { 

    @GraphId 
    private Long id; 

    private String email; 

    @Relationship(direction = Relationship.INCOMING, type = "TASK_USER_ASSIGNED") 
    private Set<Task> tasks; 

    @Relationship(direction = Relationship.INCOMING, type = "PROJECT_USER") 
    private Set<Project> projects; 
} 

Antwort

1

Sie können Neo4jTemplate.query verwenden und eine benutzerdefinierte Abfrage das Ergebnis abzurufen. In diesem Fall ist n ein Projekt, das mit Eigenschaften und Aufgaben gefüllt wurde. Die ID-Funktion erhält die ID eines Knotens.

1

SDN 4 unterstützt das Laden von Entitäten mit einigen Relationen nicht - es gibt keine (Tiefe 0) oder alle (Tiefe n, Standardtiefe 1).

Wenn Sie also ein Projekt mit der Standardtiefe 1 laden, werden Eigenschaften des Projekts, Eigenschaften zugehöriger Aufgaben und Benutzer geladen, nicht jedoch ihre Beziehungen.

Wenn Sie nur Entitäts-IDs benötigen, dann ist, wie von @fkorn beantwortet, eine benutzerdefinierte Abfrage erforderlich