Java 关系实体的Spring数据Neo4j存储库

Java 关系实体的Spring数据Neo4j存储库,java,spring-data,spring-data-neo4j,Java,Spring Data,Spring Data Neo4j,我希望像查询节点一样查询RelationshipEntity 套餐信息: groupId=org.springframework.data artifactId=spring-data-neo4j version=5.1.5.RELEASE 我已经发布了下面的虚拟代码。只要概念清楚,请不要介意是否有任何错误或错误 节点(1)->员工 @NodeEntity("Employee") public class Employee{ @Id @Generate

我希望像查询节点一样查询RelationshipEntity

套餐信息:

groupId=org.springframework.data
artifactId=spring-data-neo4j
version=5.1.5.RELEASE
我已经发布了下面的虚拟代码。只要概念清楚,请不要介意是否有任何错误或错误



节点(1)->员工

@NodeEntity("Employee")
public class Employee{

    @Id
    @GeneratedValue
    Long id;
    String name;

    // Id
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    // Name
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Relationship(type = STARTED, direction = Relationship.OUTGOING)
    private List<Status> starts = new ArrayList<>();

    @Relationship(type = PAUSED, direction = Relationship.OUTGOING)
    private List<Status> pause = new ArrayList<>();

    @Relationship(type = STOPED, direction = Relationship.OUTGOING)
    private List<Status> stops = new ArrayList<>();

    @Relationship(type = COMPLETED, direction = Relationship.OUTGOING)
    private List<Status> action = new ArrayList<>();

    // Default Relationship
    @Relationship(type = ACTION, direction = Relationship.OUTGOING)
    private List<Status> action = new ArrayList<>();
}


关系实体->状态

@RelationshipEntity
public class Status {

    @Id
    @GeneratedValue
    Long id;
    String name;

    // Id
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    // Name
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @StartNode
    private Employee employee;

    @EndNode
    private Project project;
}


这个存储库工作得非常好

public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    Employee findByName(String name);

    @Query("MATCH (e:Employee)-[r]->(p:Project) WHERE e.name={empName} AND p.name={prjName} RETURN e ")
    Employee getEmployeeWorkingOnProjectId(@Param("empName") String empName, @Param("prjName") String prjName);
}
Neo4j浏览器中的密码结果

(将真实项目图像替换为测试图像)

预期结果(例如) 或


或者关系实体同时拥有两个连接节点的其他类似结果。

在从下面提到的
员工(模型/实体)中删除特定代码后,我能够使
状态存储库
正常工作:

    @Relationship(type = STARTED, direction = Relationship.OUTGOING)
    private List<Status> starts = new ArrayList<>();

    @Relationship(type = PAUSED, direction = Relationship.OUTGOING)
    private List<Status> pause = new ArrayList<>();

    @Relationship(type = STOPED, direction = Relationship.OUTGOING)
    private List<Status> stops = new ArrayList<>();

    @Relationship(type = COMPLETED, direction = Relationship.OUTGOING)
    private List<Status> action = new ArrayList<>();

    // Default Relationship
    @Relationship(type = ACTION, direction = Relationship.OUTGOING)
    private List<Status> action = new ArrayList<>();

@关系(类型=开始,方向=关系。传出)
private List start=new ArrayList();
@关系(类型=暂停,方向=关系。传出)
私有列表暂停=新建ArrayList();
@关系(类型=停止,方向=关系。传出)
private List stops=new ArrayList();
@关系(类型=已完成,方向=关系。传出)
私有列表操作=新建ArrayList();
//默认关系
@关系(类型=动作,方向=关系。传出)
私有列表操作=新建ArrayList();

您的查询能否在neo4j浏览器中获得正确的结果?我已经添加了结果为什么您要在StatusRepository上匹配员工?因为我想获得特定员工的状态,而不是每个人的状态。
public interface StatusRepository extends CrudRepository<Status, Long> {

    @Query("MATCH (e:Employee)-[r]->(p:Project) WHERE e.name={empName} AND p.name={prjName} RETURN * ")
    Status getEmployeeWorkingOnProject(@Param("empName") String empName, @Param("prjName") String prjName);


    /* OR 
    @Query("MATCH (e:Employee)-[r]->(p:Project) WHERE e.name={empName} AND p.name={prjName} AND r.name={statusName} RETURN * ")
    Status getEmployeeWorkingOnProject(@Param("empName") String empName, @Param("prjName") String prjName, @Param("statusName") String statusName)
    */
}
{
  Status: {
    name: ..,
    Employee: {
      ...
    },
    Project: {
      ...
    }
  }
},
{
  Status: {
    name: ..,
    Employee: {
      ...
    },
    Project: {
      ...
    }
  }
},
..
STARTED : {
  Employee: {
    ...
  },
  Project: {
    ...
  }
},
STOPPED : {
  Employee: {
    ...
  },
  Project: {
    ...
  }
},
    @Relationship(type = STARTED, direction = Relationship.OUTGOING)
    private List<Status> starts = new ArrayList<>();

    @Relationship(type = PAUSED, direction = Relationship.OUTGOING)
    private List<Status> pause = new ArrayList<>();

    @Relationship(type = STOPED, direction = Relationship.OUTGOING)
    private List<Status> stops = new ArrayList<>();

    @Relationship(type = COMPLETED, direction = Relationship.OUTGOING)
    private List<Status> action = new ArrayList<>();

    // Default Relationship
    @Relationship(type = ACTION, direction = Relationship.OUTGOING)
    private List<Status> action = new ArrayList<>();