java – Spring Data Neo4J 4 – 没有template.fetch()
作者:互联网
我正在尝试从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将获取相关实体的第一级,但不获取它们的关系等等.
不支持按关系类型控制深度.
标签:java,neo4j,spring-data-neo4j,spring-data-neo4j-4 来源: https://codeday.me/bug/20190711/1432538.html