Neo4j OGM Neo4jSession变量替换查询失败
对我来说: 工作 此查询不起作用:Neo4j OGM Neo4jSession变量替换查询失败,neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data Neo4j 4,Neo4j Ogm,对我来说: 工作 此查询不起作用: 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()); 同样的结果 我正在使用OGM 2.0.2、neo4j 2.3.2和Spring数据neo4j 4.1.1,但我在
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());
同样的结果
我正在使用OGM 2.0.2、neo4j 2.3.2和Spring数据neo4j 4.1.1,但我在没有使用neo4j本身的neo4j操作的情况下尝试了这一点,得到了相同的结果。哦,我还在HTTP驱动程序中使用neo4j的remove实例
OGM中有bug吗
更多信息:
通过网络,我相信这些信息是这样的:
return (List) neo4jOperations.queryForObjects(Widget.class, query, params);
@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;
}
}
更多信息:
我已经用小部件@QueryResult和@NodeEntity(带getter和setter)尝试过了
及
我还通过电线检查了响应,在这两种情况下都是这样:
return (List) neo4jOperations.queryForObjects(Widget.class, query, params);
@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;
}
}
如果我删除Widget@NodeEntity,这就是发出的请求:
{
"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":[
]
}
移除Widget@NodeEntity后,响应中确实包含正确的数据,但映射程序抛出:
标量响应查询只能返回一列。确保你的
cypher查询只返回一项
OGM无法将属性集合映射到域实体。 您的查询返回:
{
"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
}
]
}
但是,如果OGM是一个实体的话,没有什么可以告诉它这是一个什么样的实体
将其更改为
RETURN n
应使用neo4jooperations.queryForObjects(Widget.class、query、params)执行此操作代码>OGM无法将属性集合映射到域实体中。
您的查询返回:
{
"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
}
]
}
但是,如果OGM是一个实体的话,没有什么可以告诉它这是一个什么样的实体
将其更改为RETURN n
应使用neo4jooperations.queryForObjects(Widget.class、query、params)执行此操作代码>Neo4j OGM无法处理不返回整个节点对象的映射查询。如果在查询中仅请求节点属性的子集,则必须使用返回结果的查询方法。然后你必须自己做映射
如果您使用的是spring-data-neo4j,那么可以使用@QueryResult注释和repository@Query来处理映射。如果你看一下代码,他们已经从Neo4jSession提供的元数据中骗到了一个映射器
一个例外是,如果查询节点上的单个属性,则queryForObjects函数将起作用
对我来说这似乎是疏忽,但我该说谁呢 Neo4j OGM无法处理不返回整个节点对象的映射查询。如果在查询中仅请求节点属性的子集,则必须使用返回结果的查询方法。然后你必须自己做映射
如果您使用的是spring-data-neo4j,那么可以使用@QueryResult注释和repository@Query来处理映射。如果你看一下代码,他们已经从Neo4jSession提供的元数据中骗到了一个映射器
一个例外是,如果查询节点上的单个属性,则queryForObjects函数将起作用
对我来说这似乎是疏忽,但我该说谁呢 queryForObject不是用于随机节点属性的方法。我已经对您报告的问题进行了评论,queryForObject不是您应该使用的随机节点属性方法。我也对你报道的问题发表了评论
RETURN n.partNumber AS id, n.name AS description, n.urn AS urn