Spring数据Neo4j neo4jTemplate.fetch()只返回一个值
我正在将使用@Fetch的工作系统转换为延迟加载策略。但是,当我使用容器检索对象时,容器只有一个条目,而neo4jTemplate.fetch(obj.getContainer())不会检索其他条目 以下是相关的片段Spring数据Neo4j neo4jTemplate.fetch()只返回一个值,neo4j,spring-data-neo4j,Neo4j,Spring Data Neo4j,我正在将使用@Fetch的工作系统转换为延迟加载策略。但是,当我使用容器检索对象时,容器只有一个条目,而neo4jTemplate.fetch(obj.getContainer())不会检索其他条目 以下是相关的片段 @NodeEntity public class SourcePage { @GraphId private Long id; @RelatedTo(type = "GROUP_MEMBER") private Group group; 组别:
@NodeEntity
public class SourcePage {
@GraphId
private Long id;
@RelatedTo(type = "GROUP_MEMBER")
private Group group;
组别:
@NodeEntity
public class Group {
@GraphId
private Long id;
@RelatedTo(type = "GROUP_MEMBER", direction = Direction.INCOMING)
private Set<SourcePage> sourcePages = new HashSet<>();
结果是:
java.lang.AssertionError:
Expected: is <254>
but: was <1>
它按预期返回254。我还尝试了方向。在关系的每一方面都是如此-结果相同。我发现了问题。这是深奥和可信的,它可能会帮助其他人看到同样的症状 首先,我没有表明我有自己的SourcePage hashCode()。它散列了一个字段,定义为:
@NotEmpty
@Indexed
private String url;
如果没有@Fetch,则不会自动检索“url”,因此容器中的所有SourcePage都具有相同的哈希代码。这导致了100%的冲突,并且只向集合中添加了一个条目
如果我删除了hashCode(),那么默认的哈希就起作用了,所有的对象都被添加到集合中
经过几个小时的调试,我发布了我的问题。当然,就在那之后,我偶然发现了解决方案
故事的寓意是:不要在没有ID的成员数据上提供哈希函数
MATCH (a)-[:`GROUP_MEMBER`]->(b) RETURN count(b)
@NotEmpty
@Indexed
private String url;