使用Spring数据存储库加载Neo4j嵌套关系

问题描述 投票:1回答:1

我有以下课程

import java.util.Set;

import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
@NodeEntity
public class Client {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @Relationship(type = "HAS_CONFIGURED", direction = Relationship.OUTGOING)
    public Set<Environment> environments;

    public Client () {

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Environment> getEnvironments() {
        return environments;
    }

    public void setEnvironments(Set<Environment> environments) {
        this.environments = environments;
    }

}

import java.util.Set;

import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;

@NodeEntity
public class Environment {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @Relationship(type = "HAS_INSTALLED", direction = Relationship.OUTGOING)
    public Set<Application> applications;

    public Environment() {

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Application> getApplications() {
        return applications;
    }

    public void setApplications(Set<Application> applications) {
        this.applications = applications;
    }

}

import java.util.Set;

import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import org.neo4j.ogm.annotation.RelationshipEntity;

@NodeEntity
public class Application {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @Relationship(type = "CAN_THROW", direction = Relationship.OUTGOING)
    public Set<Error> errors;

    public Application() {

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Error> getErrors() {
        return errors;
    }

    public void setErrors(Set<Error> errors) {
        this.errors = errors;
    }

}

而且我正尝试使用Crud存储库加载所有文件

import java.util.List;

import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;

import com.nic.loganalyzer.loganalyzer.model.entity.graph.Client;

public interface ClientRepository extends Neo4jRepository<Client, Long> {


    List<Client> findAllByName(String name);

}

层次结构就像Client-->Environment-->Application--Error。问题在于它仅加载到应用程序,但是应用程序不加载环境。渴望装载吗?否则如何加载整个结构并遍历。我的遍历方式如下

List<Client> findAllByName = clientRepository.findAllByName(eventLog.getClient());
for (Client client: findAllByName) {
    List<Environment> environments = client.getEnvironments().stream()
            .filter(e -> e.getName().equalsIgnoreCase(eventLog.getEnvironment()))
            .collect(Collectors.toList());
    for (Environment environment : environments) {
        List<Application> applications = environment.getApplications().stream()
                .filter(e -> e.getName().equalsIgnoreCase(eventLog.getApplication()))
                .collect(Collectors.toList());
        for (Application application : applications) {
            List<Error> errors = application.getErrors().stream()
                    .filter(e -> eventLog.getError().contains(e.getName()))
                    .collect(Collectors.toList());
java spring-boot neo4j spring-data-neo4j
1个回答
0
投票

据我了解,派生查找器的默认“深度”值为1。

如果要加载整个层次结构,请尝试在派生的查找器顶部添加@Depth(value = 3)。

您的方法应类似于:

@Depth(value = 3)
List<Client> findAllByName(String name);
© www.soinside.com 2019 - 2024. All rights reserved.