我应该期望 Neo4jOperations#queryForObjects 与@QueryResult POJO 一起工作吗?

Should I expect Neo4jOperations#queryForObjects to work with @QueryResult POJOs?

Neo4jOperations#queryForObjects() 似乎不能很好地与 @QueryResult POJO 一起使用 - 它总是说结果集是空的。

正在尝试 Neo4jOperations#queryForObjects - 它说结果为空:

@Test
public void thisDoesNotWork() {
    Iterable<ClassNodeIdAndName> result = neo4jOperations.queryForObjects(
            ClassNodeIdAndName.class,
            "MATCH (c:ClassNode) RETURN ID(c) AS id, c.name AS name",
            new HashMap<>());
    assertTrue(result.iterator().hasNext());
}

正在尝试 Neo4jOperations#query - 表示结果不为空:

@Test
public void thisWorksFine() {
    Result result = neo4jOperations.query(
            "MATCH (c:ClassNode) RETURN ID(c) AS id, c.name AS name",
            new HashMap<>());
    assertTrue(result.iterator().hasNext());
}

尝试使用 @Query 存储库 - 表示结果不为空:

@Test
public void thisWorksFineAsWell() {
    List<ClassNodeIdAndName> classNodeIdsAndNames = classNodeRepository.getAllIdsAndNames();
    assertFalse(classNodeIdsAndNames.isEmpty());
}

public interface ClassNodeRepository extends GraphRepository<ClassNode> {
    @Query("MATCH (c:ClassNode) RETURN ID(c) AS id, c.name AS name")
    List<ClassNodeIdAndName> getAllIdsAndNames();
}

@QueryResult
public class ClassNodeIdAndName {
    public Long id;
    public String name;
}

Documentation

Iterable queryForObjects(Class entityType,

entityType - The Class denoting the type of entity to return

但我很困惑是应该查看 实体类型 还是 对象 。如果它不应该处理 @QueryResult,我希望它抛出而不是不返回任何结果。

我正在使用 spring-data-neo4j 4.1.3.RELEASE

@QueryResult 是一个 Spring Data Neo4j 概念,仅适用于 Spring Repositorys.

Neo4jOperationsNeo4j OGMSession class 的薄包装,因此不处理返回查询结果对象的概念。

另见: