通过 loadAll by ids 加载递归关系时出错
Error loading recursive relationship by loadAll by ids
使用新的 Neo4j 2.3 OGM。尝试通过 id 加载实体时出现以下问题:
@NodeEntity
class Person {
Long id;
String name;
@Relationship(type="Friend", direction = Direction.OUTGOING)
public List<Person> friends;
}
假设 (1, "Alex") 与 (2, "Joseph") 和 (3, "Guy")。 (4, "Nati") 是 (5, "Amit") 的朋友,使用以下代码:
session.loadAll(Person.class, Arrays.toList(new Long() { 1L, 4L }), 1)
应该 return 2 Person 个对象,Alex 包含两个 friends(Guy、Joseph)和 Nati 包含一个 friend 但实际上 returns 是 5 个对象(Alex、Guy、Joseph、Nati、Amit)。尽管 Mike 和 Nati 确实包含他们的朋友,但我通过两个 ID 请求 Persons 并得到一个包含 5 的 Iterable 似乎很奇怪(当然也不需要)。有人知道这是为什么吗?这是一个错误吗?
这是设计使然。 OGM 有一个搜索深度的概念。默认情况下(在您的示例中,明确地)搜索深度为 1,这意味着从图中获取请求的对象及其直接邻居。如果您不希望出现这种情况,可以明确设置搜索深度。像这样将其设置为零:
session.loadAll(Person.class, Arrays.toList(new Long() { 1L, 4L }), 0)
将只获取请求的对象。
此问题现已在 1.1.4-SNAPSHOT 版本中得到修复。
使用新的 Neo4j 2.3 OGM。尝试通过 id 加载实体时出现以下问题:
@NodeEntity
class Person {
Long id;
String name;
@Relationship(type="Friend", direction = Direction.OUTGOING)
public List<Person> friends;
}
假设 (1, "Alex") 与 (2, "Joseph") 和 (3, "Guy")。 (4, "Nati") 是 (5, "Amit") 的朋友,使用以下代码:
session.loadAll(Person.class, Arrays.toList(new Long() { 1L, 4L }), 1)
应该 return 2 Person 个对象,Alex 包含两个 friends(Guy、Joseph)和 Nati 包含一个 friend 但实际上 returns 是 5 个对象(Alex、Guy、Joseph、Nati、Amit)。尽管 Mike 和 Nati 确实包含他们的朋友,但我通过两个 ID 请求 Persons 并得到一个包含 5 的 Iterable 似乎很奇怪(当然也不需要)。有人知道这是为什么吗?这是一个错误吗?
这是设计使然。 OGM 有一个搜索深度的概念。默认情况下(在您的示例中,明确地)搜索深度为 1,这意味着从图中获取请求的对象及其直接邻居。如果您不希望出现这种情况,可以明确设置搜索深度。像这样将其设置为零:
session.loadAll(Person.class, Arrays.toList(new Long() { 1L, 4L }), 0)
将只获取请求的对象。
此问题现已在 1.1.4-SNAPSHOT 版本中得到修复。