gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:59:37 25 4
gpt4 key购买 nike

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

下面是我的组织 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
}

到目前为止尝试过:使用特定深度的 findOne。
例如: graphRepo.findOne(organizationId,3);
这将返回完整的组织网络。

我需要为组织生成层次结构数据。
有没有办法进行递归查询来生成组织层次结构。


我只需要 ID、姓名、 child (子组织)
示例格式

[
{
id: 1,
name: 'Organization 1',
children: [
{ id: 2, name: 'Organization 1 ' },
{ id: 3, name: 'Organization 2' }
]
},
{
id: 4,
name: 'Organization 2',
children: [
{
id: 5,
name: 'Organization 2 unit'
}

]
}
]

最佳答案

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

Class OrganizationDTO {
private String code;
private String name;
private List<OrganizationDTO> children;
//Add setter and getter

}
然后,使用密码查询修改您的存储库:

@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");
}

}
}


实现 Rest API 后,OrganizationDTO 将按照您的预期响应 JSON 格式。我希望这可以帮助你。

关于java - 为 Neo4j 节点实体生成分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41161810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com