cypher-dsl (b/c -clause は動的) で構築されたこのクエリがあり、結果セットには、注釈付きの POJO (他の列の中でも)MATCH
によって表されるノードが含まれます。@NodeEntity
私の質問は次のとおりです: 動的 (注釈なし) クエリの結果を@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
:query
convert
@Inject
public SearchService(Neo4jTemplate template, ...) {
this.template = template;
...
}
public List<QueryResult> search(...) {
List<QueryResult> result = new ArrayList<>();
Execute cyQuery =
start(...)
...
.returns(
"cust",
"val1",
...
);
for (Map<String, Object> res : this.template.query(cyQuery.toString(), ...)) {
Customer cust = this.template.convert((NodeProxy)res.get("cust"), Customer.class);
result.add(new QueryResult()
.setCustomer(cust)
...
);
}
return result;
}
(Customer がクラスであり、もはやインターフェイスではないと仮定します)
しかし、それを行うためのより良い方法はありますか?