加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring Data Neo4J 4 – 没有template.fetch()

发布时间:2020-12-15 02:12:04 所属栏目:Java 来源:网络整理
导读:我正在尝试从 Spring Data Neo4J 3升级到4 – 我正在使用Neo4J 2.2.2. 我使用GraphRepository实例来查询数据库,获取一个对象. 此对象具有多个关系,这些关系未被提取(故意,以避免在整个图形中读取). 在SDN3代码中,只需使用Neo4JTemplate类为我需要获取的每个
我正在尝试从 Spring Data Neo4J 3升级到4 – 我正在使用Neo4J 2.2.2.

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

此对象具有多个关系,这些关系未被提取(故意,以避免在整个图形中读取).

在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;
    }

}

我的存储库类:

public interface FileRepository extends GraphRepository<File> {

    File findByFileName(String fileName);     
}

执行getActiveState()方法时,我得到一个null返回,因为状态Set为空(尚未获取).

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

解决方法

SDN 4允许您使用 persistence horizon控制相关实体的加载.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读