に失敗:のNeo4j OGM Neo4jSession変数置換クエリは、私にとって
neo4jSession.query("MATCH (n:Widget) WHERE (n.partNumber STARTS WITH '001') RETURN n.partNumber AS id, n.name AS description, n.urn AS urn LIMIT 10", Collections.emptyMap());
作品を。
このクエリでは動作しません:
String query = "MATCH (n:Widget) " +
"WHERE (n.partNumber STARTS WITH {queryString}) " +
"RETURN n.partNumber AS id, n.name AS description, n.urn AS urn " +
"LIMIT {limit}";
Map<String, Object> params = ImmutableMap
.<String, Object>builder()
.put("queryString", queryString)
.put("limit", limit)
.build();
return (List) neo4jOperations.queryForObjects(Object.class, query, params);
それは空のリストを返します。私も実際のドメインオブジェクトで試してみました:
return (List) neo4jOperations.queryForObjects(Widget.class, query, params);
同じ結果です。
私はOGM 2.0.2、neo4j 2.3.2、Spring Data Neo4j 4.1.1を使用していますが、Neo4jSessionを単独で使用しても同じ結果を得てneo4jOperationsなしでこれを試しました。ああ、私はHTTPドライバでneo4jのインスタンスを削除しています。
OGMにバグはありますか?
MORE INFO:ワイヤ上
、私は、メッセージは次のようになりBELIEVE:
{ "statements":[
{
"statement":"MATCH (n:Widget) WHERE (n.partNumber STARTS WITH {queryString}) RETURN n.partNumber AS id, n.name AS description, n.urn AS urn LIMIT {limit}",
"parameters":{
"queryString":"001",
"limit":10
},
"resultDataContents":[
"graph"
],
"includeStats":false
} ] }
{ "statements":[
{
"statement":"MATCH (n:Widget) WHERE (n.partNumber STARTS WITH '001') RETURN n.partNumber AS id, n.name AS description, n.urn AS urn LIMIT 10",
"parameters":{
},
"resultDataContents":[
"rest"
],
"includeStats":true
} ] }
さらに多くの情報:私は両方@QueryResultとしてウィジェットでこれを試してみた
と@NodeEntity(ゲッターとセッター付き)。
@QueryResult
public class TypeaheadData {
public Object id;
public String description;
public String uid;
}
と
@NodeEntity
public class TypeaheadData {
public Object id;
public String description;
public String uid;
public TypeaheadData() {
}
public Object getId() {
return id;
}
public void setId(Object id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
は、私はまた、ワイヤ上の応答を検査してきたし、両方のケースで、それは次のようになります。
{
"results":[
{
"columns":[
"id",
"description",
"uid"
],
"data":[
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
},
{
"graph":{
"nodes":[
],
"relationships":[
]
}
}
]
}
],
"errors":[
]
}
私はウィジェット@NodeEntity、これを削除した場合要求が送信された:
{
"statements":[
{
"statement":"MATCH (n:Widget) WHERE (n.partNumber STARTS WITH {queryString}) RETURN n.partNumber AS id, n.name AS description, n.urn AS urn LIMIT {limit}",
"parameters":{
"queryString":"001",
"limit":10
},
"resultDataContents":[
"row"
],
"includeStats":false
}
]
}
ウィジェット@NodeEntityを除去したが、応答はそれで正しいデータを持っているが、マッパーはスロー:
スカラ応答クエリは、1つの列のみを返す必要があります。 サイファークエリで1つのアイテムのみが返されるようにしてください。
queryForObjectは、ランダムノードプロパティで使用する必要があるメソッドではありません。あなたが報告した問題についてもhttps://github.com/neo4j/neo4j-ogm/issues/184にコメントしました – Luanne