gpt4 book ai didi

java - Spring data Neo4j 获取关系

转载 作者:行者123 更新时间:2023-12-01 10:26:21 24 4
gpt4 key购买 nike

我正在使用 spring-data-neo4j V4 并寻找解决方案如何获取未直接连接到加载实体的实体。解释一下:

我的 neo4j 数据库中有 3 个实体。

@NodeEntity(label="membership")
public class Membership extends AbstractEntity{

public Membership(){ }

private String membershipId;

@Relationship(type = "IN_YEAR", direction = Relationship.OUTGOING)
private Set<Year> year = new HashSet<>();

//getter+setter

}

@NodeEntity(label="year")
public class Year extends AbstractEntity{

public Year(){}

private String name;
private String membershipId;

@Relationship(type = "IN_MONTH", direction = Relationship.OUTGOING )
private Set<Month> month = new HashSet<>();

//getter+setter
}

@NodeEntity(label="month")
public class Month extends AbstractEntity{

private String name;

//getter+setter
}

当我调用我的 MembershipRepository 并按 Id 加载 Membership 时:

membershipRepository.findByMembershipId(id);

将获取实体,但不会获取实体。谁能告诉我们在加载 membership 实体时加载 month 实体的最佳或推荐方法是什么?正如 http://docs.spring.io/spring-data/neo4j/docs/current/reference/html/ 中所写@Fetch 自版本 4 以来已过时,因此我需要另一个解决方案。

编辑:我读到http://docs.spring.io/spring-data/neo4j/docs/current/reference/html/获取的解决方法,只需使用 Neo4jTemplate 中的 load 方法即可。所以我通过以下方式加载每年的月份:

Set<Year> fetchedYear = new HashSet<>();
for(Year year : ms.getYear()){
fetchedYear.add(neo4jTemplate.load(Year.class, year.getId(), 1));
}
ms.setYear(fetchedYear);

但是有更好的解决方案吗?

最佳答案

第一个选项是使用 loadByProperty 并将加载深度设置为 2。

示例:

neo4jTemplate.loadByProperty(Membership.class, "membershipId", value, 2);

这适用于 SDN-4.1.0-Snapshot

但是,如果您不想加载深度为 2 的成员(member)资格,因为将加载太多图形(从其他关系),那么我认为您可以构造一个密码查询(使用可选匹配),使用 neo4jTemplate 执行它并检索对象,然后由于“smartObjectMapping”,该对象将被自动映射。

示例:

String query = "MATCH (n:Membership{membershipId:{id})-[r]-(m) OPTIONAL MATCH (m:Year)-[e]-(x) RETURN n,r,m,e,x";
Map<String,Object> map = new HashMap<>();
map.put("id",value);
Result result = neo4jTemplate.query(query,map);

现在结果中的 n 应包含所有映射关系

关于java - Spring data Neo4j 获取关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35337602/

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