Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为Neo4j节点实体生成分层数据_Java_Neo4j_Spring Data_Cypher_Spring Data Neo4j - Fatal编程技术网

Java 为Neo4j节点实体生成分层数据

Java 为Neo4j节点实体生成分层数据,java,neo4j,spring-data,cypher,spring-data-neo4j,Java,Neo4j,Spring Data,Cypher,Spring Data Neo4j,以下详细信息将描述我的问题。 框架:Spring boot 数据库:Neo4j嵌入式模式 存储库:GraphRespository 下面是我的组织POJO @NodeEntity public class Organization extends UserBaseEntity { @NotNull(message = "error.Organization.name.notnull") private String name; private String email;

以下详细信息将描述我的问题。
框架:Spring boot
数据库:Neo4j嵌入式模式
存储库:GraphRespository

下面是我的组织POJO

@NodeEntity
public class Organization extends UserBaseEntity {

   @NotNull(message = "error.Organization.name.notnull")
   private String name;
   private String email;

   @Relationship(type = HAS_SUB_ORGANIZATION)
   private List<Organization> children = new ArrayList<>();

 // getter and setters
}

我建议您使用我在应用程序中实现的解决方案,如下所示: 首先,定义用于映射数据的OrganizationDTO

Class OrganizationDTO {
private String code;
private String name;
private List<OrganizationDTO> children;
//Add setter and getter
类组织到{
私有字符串码;
私有字符串名称;
私人名单儿童;
//添加setter和getter
}
然后,使用cypher查询修改存储库:

@Repository
public class OrganisationRepositoryImpl implement OrganisationRepository {

    private final Neo4jUtils neo4jUtils;


    List<Organisation> findOrg(String orgCode) {

        Map<String, Object> params = map("orgCode", orgCode);

         String query = "MATCH (n:Organisation)-[r:HAS_SUB_ORGANIZATION*]->(m:Organisation) "+
        " where n.code = {orgCode} return " +
        " n.code, "+
        " n.name, "+ 
        " m is not null haschildren ," +
        " m as children" +
    return neo4jUtils.cypher(query, params)
                .map(this::mapToOrganization)
                .collect(toList());
    }

    private OrganizationDTO mapToOrganization(Map<String, Object> map) {
        OrganizationDTO org = new OrganizationDTO(
            map.get("n.code"), map.get("n.name"));
        if((Boolean)map.get("haschildren")){
            org.setChilren(m.get("children");
        }

    }
}
@存储库
公共类OrganizationRepositoryImpl实现OrganizationRepository{
私人最终Neo4jUtils Neo4jUtils;
列表findOrg(字符串或代码){
映射参数=映射(“orgCode”,orgCode);
String query=“匹配(n:ORGANIZATION)-[r:HAS\u SUB\u ORGANIZATION*]->(m:ORGANIZATION)”+
“其中n.code={orgCode}返回”+
“n.代码,”+
“n.name,”+
m不是空值,而是子项+
“我还是孩子”+
返回neo4jUtils.cypher(查询,参数)
.map(此::mapToOrganization)
.collect(toList());
}
私有组织到映射到组织(映射){
OrganizationDTO org=新组织DTO(
map.get(“n.code”)、map.get(“n.name”);
if((布尔)map.get(“haschildren”)){
org.setChilren(m.get(“儿童”);
}
}
}


当实现Rest API时,组织会按照您的预期响应JSON格式。我希望这能帮助您。

您是否尝试过使用带有
@query
注释的自定义存储库查询?
@Repository
public class OrganisationRepositoryImpl implement OrganisationRepository {

    private final Neo4jUtils neo4jUtils;


    List<Organisation> findOrg(String orgCode) {

        Map<String, Object> params = map("orgCode", orgCode);

         String query = "MATCH (n:Organisation)-[r:HAS_SUB_ORGANIZATION*]->(m:Organisation) "+
        " where n.code = {orgCode} return " +
        " n.code, "+
        " n.name, "+ 
        " m is not null haschildren ," +
        " m as children" +
    return neo4jUtils.cypher(query, params)
                .map(this::mapToOrganization)
                .collect(toList());
    }

    private OrganizationDTO mapToOrganization(Map<String, Object> map) {
        OrganizationDTO org = new OrganizationDTO(
            map.get("n.code"), map.get("n.name"));
        if((Boolean)map.get("haschildren")){
            org.setChilren(m.get("children");
        }

    }
}