Java 关系实体的Spring数据Neo4j存储库
我希望像查询节点一样查询RelationshipEntity 套餐信息: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
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<>();