使用CypherDSL的MapResult

时间:2013-09-03 15:00:17

标签: java spring neo4j cypher spring-data-neo4j

我有这个查询,用cypher-dsl构建(b / c MATCH - 子句是动态的),结果集包含由@NodeEntity带注释的POJO表示的节点(以及其他列) )。

我的问题是:有没有办法将动态(非注释)查询的结果包装到@MapResult(或以NodeEntities作为值的常规地图)?

以下方法似乎不起作用,因为GraphRepository的推断类型必须是Node-或RelationshipEntity:

@NodeEntity
public class Customer {
    @GraphId
    Long id;
    ...
}

@MapResult
public interface CustomerQueryResult {
    @ResultColumn("cust")
    Customer getCustomer();
    @ResultColumn("val1")
    int getVal1();
    ...
}

public interface CustomerQueryRepository extends GraphRepository<CustomerQueryResult> {
}

@Service
public class SearchService {
    private CustomerQueryRepository repo;
    ...

    @Inject
    public SearchService(CustomerQueryRepository repo, ...) {
        this.repo = repo;
        ...
    }

    public Iterable<CustomerQueryResult> search(...) {
        Execute cyQuery =
            start(...)
            ...
            .returns(
                "cust",
                "val1",
                ...
            );
        return this.repo.query(cyQuery.toString(), ...);
    }
}

我正在使用spring-data-neo4j版本2.3.0.M1

感谢您的帮助,提前


更新 好的,使用Neo4jTemplate的{​​{1}}和query方法完成工作:

convert

(假设客户现在是一个班级,而不再是一个界面)

但是,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:2)

您应该可以使用query(...).to(CustomerQueryResult.class)

您还可以使用CypherDslRepository来运行查询,并获得可以使用EndResult的{​​{1}}。

to(CustomerQueryResult.class)