Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j一对多获取数据_Neo4j_Cypher_Spring Data Neo4j - Fatal编程技术网

Neo4j一对多获取数据

Neo4j一对多获取数据,neo4j,cypher,spring-data-neo4j,Neo4j,Cypher,Spring Data Neo4j,在我的Spring Boot/Neo4j应用程序中,我有以下实体: @NodeEntity public class User extends BaseEntity { private static final String HAS = "HAS"; @GraphId private Long id; private String username; private String password; private String emai

在我的Spring Boot/Neo4j应用程序中,我有以下实体:

@NodeEntity
public class User extends BaseEntity {

    private static final String HAS = "HAS";

    @GraphId
    private Long id;

    private String username;

    private String password;

    private String email;

    private String firstName;

    private String lastName;

    @RelatedTo(type = HAS, direction = Direction.OUTGOING)
    private Set<Role> roles = new HashSet<Role>();

....

}


@NodeEntity
public class Vote extends BaseEntity {

    private static final String VOTED_ON = "VOTED_ON";
    private final static String VOTED_FOR = "VOTED_FOR";
    private static final String CREATED_BY = "CREATED_BY";

    @GraphId
    private Long id;

    @RelatedTo(type = VOTED_FOR, direction = Direction.OUTGOING)
    private Decision decision;

    @RelatedTo(type = VOTED_ON, direction = Direction.OUTGOING)
    private Criterion criteria;

    @RelatedTo(type = CREATED_BY, direction = Direction.OUTGOING)
    private User author;

    private double weight;

    private String description;


}
不适用于以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: [Assertion failed] - entity is required; it must not be null
    at org.springframework.data.neo4j.support.ParameterCheck.notNull(ParameterCheck.java:29)
    at org.springframework.data.neo4j.support.Neo4jTemplate.projectTo(Neo4jTemplate.java:240)
    at org.springframework.data.neo4j.support.conversion.EntityResultConverter.doConvert(EntityResultConverter.java:73)
    at org.springframework.data.neo4j.conversion.DefaultConverter.convert(DefaultConverter.java:44)
    at org.springframework.data.neo4j.support.conversion.EntityResultConverter.convert(EntityResultConverter.java:165)
    at org.springframework.data.neo4j.conversion.QueryResultBuilder$1.underlyingObjectToObject(QueryResultBuilder.java:86)

我帮不上忙,但这个密码能帮你得到你想要的吗

MATCH (d:Decision)<-[:VOTED_FOR]-(v:Vote)-[:VOTED_ON]->(c:Criterion)
WHERE id(d) = {decisionId} 
  AND id(c) = {criterionId} 
WITH v
MATCH v-[:CREATED_BY]->(u:User)
RETURN {id: v.id
       , weight: v.weight
       , `author.id`: u.id
       , `author.username`: u.username
       ... } as v
匹配(d:决策)(c:标准)
其中id(d)={decisionId}
和id(c)={criterionId}
与v
匹配v-[:创建人]->(u:用户)
返回{id:v.id
重量
,`author.id`:u.id
,`author.username`:u.username
…}as v
尝试使用DTO(也可以是getter接口):

@QueryResult
类VoteView{
字符串id;
双倍重量;
字符串描述;
字符串decisionId;
字符串标准;
字符串编写器;
字符串authorName;
}
@查询(“MATCH(d:Decision)(c:criteria),其中id(d)={decisionId}和id(c)={criterionId}与v,d,c匹配v-[:CREATED_BY]->(u:User)返回{id:v.id,weight:v.weight,description:v.description,decisionId:d.id,criterionId:c.id,authord:u.id,authorName:u.username}作为v”)
列出GetVotesfordecisionCriterion(@Param(“decisionId”)Long decisionId、@Param(“criterionId”)Long criterionId);

谢谢,但它将返回两个独立的实体-投票和字符串。但是我正在寻找一个解决方案,如何从您的查询中用u.username填充v.author.username并只返回“v”,我更新了答案并将属性组合到一个映射中…-不,好主意!但我无法让它在以下异常情况下工作:org.springframework.dao.InvalidDataAccessApiUsageException:[断言失败]-需要实体;org.springframework.data.neo4j.support.ParameterCheck.notNull(ParameterCheck.java:29)org.springframework.data.neo4j.support.Neo4jTemplate.projectTo(Neo4jTemplate.java:240)org.springframework.data.neo4j.support.conversion.EntityResultConvert.doConvert(EntityResultConverter.java:73)上的值不能为null。。。如此接近…其中一个项是否为空(即,返回一个空值,且映射中有一个键)?如果这是个问题,你可以合并结果或添加一个案例陈述来消除这个关键问题。我已经更新了我的问题主体。。添加了完整的投票类声明、新的查询和错误stacktraceIn SDN3您不能仅仅创建一个映射并让它假装是一个节点,这就是@QueryResult注释DTO的用途。请参阅文档。我希望避免将用户作为Vote的成员,同时在@QueryResult(Vote,User)中作为单独的实体。。我认为这是多余的。谢谢,可以很好地工作,但是使用以下查询(返回分隔列,而不是映射)@query(“MATCH(d:Decision)(c:criteria),其中id(d)={decisionId}和id(c)={criterionId}与v,d,c匹配v-[:CREATED\BY]>(u:User)返回v.id作为voteId,d.id作为decisionId,c.id作为criterionId,v.weight作为weight,v.description作为description,u.id作为authorName,u.username作为authorName,v.createDate作为createDate,v.updateDate作为updateDate”)列表getVotesfordecisionCriterion(@Param(“decisionId”)Long decisionId,@Param(“criterionId”)Long criterionId);
org.springframework.dao.InvalidDataAccessApiUsageException: [Assertion failed] - entity is required; it must not be null
    at org.springframework.data.neo4j.support.ParameterCheck.notNull(ParameterCheck.java:29)
    at org.springframework.data.neo4j.support.Neo4jTemplate.projectTo(Neo4jTemplate.java:240)
    at org.springframework.data.neo4j.support.conversion.EntityResultConverter.doConvert(EntityResultConverter.java:73)
    at org.springframework.data.neo4j.conversion.DefaultConverter.convert(DefaultConverter.java:44)
    at org.springframework.data.neo4j.support.conversion.EntityResultConverter.convert(EntityResultConverter.java:165)
    at org.springframework.data.neo4j.conversion.QueryResultBuilder$1.underlyingObjectToObject(QueryResultBuilder.java:86)
MATCH (d:Decision)<-[:VOTED_FOR]-(v:Vote)-[:VOTED_ON]->(c:Criterion)
WHERE id(d) = {decisionId} 
  AND id(c) = {criterionId} 
WITH v
MATCH v-[:CREATED_BY]->(u:User)
RETURN {id: v.id
       , weight: v.weight
       , `author.id`: u.id
       , `author.username`: u.username
       ... } as v
@QueryResult
class VoteView {
   String id;
   Double weight;
   String description;
   String decisionId;  
   String criterionId;  
   String authorId;
   String authorName;
}

@Query("MATCH (d:Decision)<-[:VOTED_FOR]-(v:Vote)-[:VOTED_ON]->(c:Criterion) WHERE id(d) = {decisionId} AND id(c) = {criterionId} WITH v, d, c MATCH v-[:CREATED_BY]->(u:User) RETURN {id: v.id, weight: v.weight, description: v.description, decisionId : d.id, criterionId : c.id, authorId: u.id, authorName: u.username} as v")
List<VoteView> getVotesForDecisionOnCriterion(@Param("decisionId") Long decisionId, @Param("criterionId") Long criterionId);