次の (プロジェクト、ユーザー、タスク) ドメイン オブジェクトがあります。Spring Data Neo4j 4 (SDN4) を介して特定の関連オブジェクトを持つエンティティを取得するにはどうすればよいですか? たとえば、関連するタスクはあるがユーザーがいないプロジェクトを取得したいとします。このサンプルは機能しません。depth
ユーザーオブジェクトを取得するため、メソッドで定義するのneo4jTemplate.load
は適切ではありません。
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;
}