나는 다음과 같은 기관이 :이 쿼리에Neo4j 사이퍼 쿼리 내 봄 데이터 Neo4j 프로젝트에서
@Query("MATCH (d:Decision)<-[:DEFINED_BY]-(c:Criterion) WHERE id(d) = {decisionId} and c.name = {name} RETURN c")
Criterion findCriterionDefinedByDecisionByName(@Param("decisionId") Long decisionId, @Param("name") String name);
기반 : 나는 다음과 같은 SDN 저장소 방법을 한
@NodeEntity
public class Decision extends Commentable {
private final static String CONTAINS = "CONTAINS";
private final static String DEFINED_BY = "DEFINED_BY";
private String name;
@Relationship(type = DEFINED_BY, direction = Relationship.INCOMING)
private Set<CriterionGroup> criterionGroups = new HashSet<>();
@Relationship(type = DEFINED_BY, direction = Relationship.INCOMING)
private Set<Criterion> criteria = new HashSet<>();
...
}
@NodeEntity
public class Criterion extends Authorable {
private final static String CONTAINS = "CONTAINS";
private final static String DEFINED_BY = "DEFINED_BY";
private String name;
@Relationship(type = CONTAINS, direction = Relationship.INCOMING)
private CriterionGroup group;
@Relationship(type = DEFINED_BY, direction = Relationship.OUTGOING)
private Decision owner;
...
}
@NodeEntity
public class CriterionGroup extends Authorable {
private final static String DEFINED_BY = "DEFINED_BY";
private final static String CONTAINS = "CONTAINS";
private String name;
@Relationship(type = DEFINED_BY, direction = Relationship.OUTGOING)
private Decision owner;
@Relationship(type = CONTAINS, direction = Relationship.OUTGOING)
private Set<Criterion> criteria = new HashSet<>();
...
}
을 Decision
에 속한 특정 이름의 Criterion
을 얻을 수 있습니다.
내 도메인 모델의 기준은 CriterionGroup
에 속할 수도 있고 아닐 수도 있습니다.
이 조건과 일치하는 CriterionGroup
을 확인하기위한 조건을 하나 더 추가하려면이 쿼리를 확장해야합니다. 다른 말로하면 제공된 {criterionGroupId}에 속한 특정 {decisionId} (즉 null 값의 경우가 아님)에 대한 구체적인 {name}이있는 Criterion을 반환해야합니다. {criterionGroupId} == null의 경우 어떤 CriterionGroup
에도 속하지 않는 기준을 찾아야합니다.
@Query("MATCH (d:Decision)<-[:DEFINED_BY]-(c:Criterion)...????????...... WHERE id(d) = {decisionId} and c.name = {name} RETURN c")
Criterion findCriterionDefinedByDecisionByName(@Param("decisionId") Long decisionId, @Param("name") String name, @Param("criterionGroupId") Long criterionGroupId);
날이 쿼리를 작성 도와주세요 :
나는 이런 식으로 뭔가를해야합니다.
는
감사합니다. 하나의 Criterion과 관련된 CriterionGroup (수천은 아님)을 가질 것입니다.하지만 수천 개의 Criterion, Decision 및 CriterionGroup이 있습니다. 하나의 CriterionGroup은 수십 개의 Criteria를 가질 수 있습니다. 따라서 성능 측면에서 보면 단일 쿼리로 솔루션 번호 하나를 사용하는 것이 안전합니까? – alexanoid
'Criterion' _to_ 0 또는 1' CriterionGroup'에서 건너 뛸 것이므로 단일 쿼리에 성능 문제가 없어야합니다. –
고마워요! 쿼리가 완벽하게 작동합니다! – alexanoid