我有这个查询,用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
(假设客户现在是一个班级,而不再是一个界面)
但是,有没有更好的方法呢?
答案 0 :(得分:2)
您应该可以使用query(...).to(CustomerQueryResult.class)
。
您还可以使用CypherDslRepository
来运行查询,并获得可以使用EndResult
的{{1}}。
to(CustomerQueryResult.class)