Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/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 Spring数据Neo4J 4-无模板.fetch()_Java_Neo4j_Spring Data Neo4j_Spring Data Neo4j 4 - Fatal编程技术网

Java Spring数据Neo4J 4-无模板.fetch()

Java Spring数据Neo4J 4-无模板.fetch(),java,neo4j,spring-data-neo4j,spring-data-neo4j-4,Java,Neo4j,Spring Data Neo4j,Spring Data Neo4j 4,我正在尝试从Spring数据Neo4J 3升级到4-我正在使用Neo4J 2.2.2 我使用GraphRespository实例来查询数据库,获取一个对象 此对象有几个关系,这些关系不会被提取(故意避免在整个图形中读取) 在SDN3代码中,只需使用Neo4JTemplate类对需要获取的每个关系执行获取调用。这非常有效 但是,在SDN4中,此功能已被删除,并被load()方法的各种实现所取代。从文档中不清楚如何实现我在SDN3中所做的 需要明确的是:如果在我检索的第一个类中有一组对象,由关系控制

我正在尝试从Spring数据Neo4J 3升级到4-我正在使用Neo4J 2.2.2

我使用GraphRespository实例来查询数据库,获取一个对象

此对象有几个关系,这些关系不会被提取(故意避免在整个图形中读取)

在SDN3代码中,只需使用Neo4JTemplate类对需要获取的每个关系执行获取调用。这非常有效

但是,在SDN4中,此功能已被删除,并被load()方法的各种实现所取代。从文档中不清楚如何实现我在SDN3中所做的

需要明确的是:如果在我检索的第一个类中有一组对象,由关系控制,那么我只想检索该集中的对象,而不是数据库中这些对象的整个集合

在升级过程中我是否错过了一些关键的东西,或者有没有一种简单的方法来完成我想做的事情

添加代码:

我的实体类:

@NodeEntity
public class File implements MetroNode {

    private Long id;

    private String fileName;

    private SourceState sourceState;

    private Set<State> states;

    @GraphId
    public Long getId() {
        return id;
    }

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

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    @Relationship(type = "HAS_FILE", direction = Relationship.INCOMING)
    public SourceState getSourceState() {
        return sourceState;
    }

    public void setSourceState(SourceState sourceState) {
        this.sourceState = sourceState;
    }

    public State addState(MetroNode otherNode, StateStatus status) {
        if (this.states == null) {
            this.states = new HashSet<State>();
        }
        State state = new State(this, otherNode, status.toString());
        this.states.add(state);
        return state;
    }

    @Relationship(type = "HAS_STATE", direction = Relationship.OUTGOING)
    public Set<State> getStates() {
        return states;
    }

    public State getActiveState() {
        if (this.states != null) {
            for (State state : this.states) {
                if (state.isActive()) {
                    return state;
                }
            }
        }
        return null;
    }

}
@NodeEntity
公共类文件实现MetroNode{
私人长id;
私有字符串文件名;
私有源状态源状态;
私有国家;
@格拉希德
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getFileName(){
返回文件名;
}
public void setFileName(字符串文件名){
this.fileName=文件名;
}
@关系(type=“HAS_FILE”,direction=Relationship.INCOMING)
public SourceState getSourceState(){
返回源状态;
}
public void setSourceState(SourceState SourceState){
this.sourceState=sourceState;
}
公共状态addState(MetroNode otherNode、StateStatus状态){
if(this.states==null){
this.states=new HashSet();
}
State State=新状态(this,otherNode,status.toString());
this.states.add(state);
返回状态;
}
@关系(type=“HAS_STATE”,direction=Relationship.OUTGOING)
公共集getStates(){
返回状态;
}
公共状态getActiveState(){
如果(this.states!=null){
for(状态:this.states){
if(state.isActive()){
返回状态;
}
}
}
返回null;
}
}
我的存储库类:

public interface FileRepository extends GraphRepository<File> {

    File findByFileName(String fileName);     
}
公共接口文件存储库扩展了GraphRespository{
文件findByFileName(字符串文件名);
}
在执行getActiveState()方法时,我得到一个null返回,因为状态集为空(尚未获取)


再看看我的代码,我想知道这是否是因为我没有使用存储库中的“本机”加载方法,而是重载版本?

SDN 4允许您使用控制加载相关实体

加载深度为0的实体将获取该实体的属性,而不获取任何相关实体。 深度1将获取第一级相关实体,但不获取它们的关系等


不支持按关系类型控制深度。

感谢您的快速回复。我已经阅读了您链接到的文档,其中包含这样一句话:“默认情况下,加载实例将映射该对象的简单属性及其直接相关的对象(即深度=1)。”在我的应用程序中,情况似乎并非如此,其中未填充由关系指定的对象集合。我误解这里的情况了吗?听起来不对。默认深度1应加载相关对象。你能用一些代码、测试和调试日志中感兴趣的行更新你的问题吗?你使用的是哪个版本的SDN4?您可以在4.1.0.BUILD-SNAPSHOT中尝试同样的方法吗?您需要包括spring libs快照spring repo.spring.io/libs-snapshot spring snapshots repo.spring.io/snapshot true您还需要确保任何传入的关系都对其方法进行了注释(如果存在,则为else字段)-因此,您还需要setSourceState上的@Relationship(type=“HAS_FILE”,direction=Relationship.INCOMING),我将尽快尝试使用4.1.0.BUILD-SNAPHOT。你确定那个注释吗?它需要在同一个类中的setter和getter上?另外,我尝试通过执行“File newFile=template.load(File.class,File.getId(),-1)”来加载,作为一个实验,它仍然为相关对象返回null