0

다음 쿼리는 "followers"수에 따라 정렬 된 계정을 내림차순으로 한도 내에서 반환해야합니다.SDN Neo4J Cypher 쿼리로 가능한 스프링 데이터 버그

매개 변수로 2 개의 변수가 필요합니다 (maxCount 및 limit). MaxCount는 팔로어 수를 나타냅니다. 따라서 maxCount가 100이면 추종자가 100 미만인 계정 만 반환하십시오.

Spring Data Neo4j App에서이 쿼리를 실행하면 다음과 같습니다. 예 : maxCount 제약 조건을 무시하는 것 같습니다. maxCount를 2로 설정하고 account1에 3 명의 팔로어가 있고 account2에 1 명의 follower가 있습니다. 그것은 follower가 1 인 account2 만 반환해야 할 때 두 계정을 잘못 반환하는 것으로 보입니다.

쿼리

@Query("MATCH (a:Account)<-[:follows]-(b:Account) WITH a, COLLECT(b) 
AS bs WHERE SIZE(bs) < {0} RETURN a ORDER BY SIZE(bs) DESC LIMIT {1}") 
List<Account> findCappedSortedAccountByFollowers(int maxCount, int resultSize); 

내가 Neo4j 콘솔에 직접

아마 이것이다 봄 데이터 버그를 입력하면 그것은 작동?

SDN 버전 : 4.1.3.RELEASE

OGM 임베디드 드라이버 버전 : 2.0.5

작은 응용 프로그램을 사용할 수 문제를 보여주기 위해 여기에

+0

SDN 4.2.0.BUILD-SNAPSHOT 및 OGM 2.1.0-SNAPSHOT으로 시험해 볼 수 있습니까? 설정이 필요하면 http://graphaware.com/neo4j/2016/09/30/upgrading-to-sdn-42.html이 필요할 수 있습니다. – digx1

+0

샘플 앱을 실행 했습니까? –

+0

예. 해당 버전에서 작동합니다. – digx1

답변

2

here는 새로운 버전으로 작동하도록 업데이트 코드입니다 . 두 테스트 모두 통과합니다. 필자는 테스트 및 모델을 문서 및 예제에 더 부합하도록 다시 작성했습니다. OGM은 도달 가능성으로 지속될 수 있음을 기억하십시오. 희망을 통해이 문제를 해결할 수 있습니다. Spring 데이터를 사용하여 Transactional 형식 테스트를 작성하는 방법을 설명했습니다 : https://stackoverflow.com/a/39887536/2271422.

build.gradle :

dependencies { 
    compile "ch.qos.logback:logback-classic:1.1.7" 
    compile "org.springframework.data:spring-data-neo4j:4.2.0.BUILD-SNAPSHOT" 
    compile "org.springframework:spring-test:4.3.3.RELEASE" 
    compile "org.neo4j:neo4j-ogm-embedded-driver:2.1.0-SNAPSHOT" 
    testCompile "junit:junit:4.12" 
} 

src/main/javacom.neo4j.relation.config :

@Configuration 
@EnableNeo4jRepositories("com.neo4j.relation.repository") 
@EnableTransactionManagement 
public class EmbeddedNeo4JConfig { 

    @Bean 
    public SessionFactory sessionFactory() { 
     return new SessionFactory("com.neo4j.relation.model"); 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() { 
     return new Neo4jTransactionManager(sessionFactory()); 
    } 
} 

src/main/javacom.neo4j.relation.model :

,286,433,210

src/main/javacom.neo4j.relation.repository :

public interface AccountRepository extends GraphRepository<Account> { 
    @Query("MATCH (a:Account)<-[:FOLLOWS]-(b:Account) WITH a, COLLECT(b) AS bs ORDER BY SIZE(bs) DESC RETURN a LIMIT {0}") 
    List<Account> findSortedAccountByFollowers(int maxSize); 

    @Query("MATCH (a:Account)<-[:FOLLOWS]-(b:Account) WITH a, COLLECT(b) AS bs WHERE SIZE(bs) <= {0} RETURN a ORDER BY SIZE(bs) DESC LIMIT {1}") 
    List<Account> findCappedSortedAccountByFollowers(int maxCount, int resultSize); 
} 

src/test/resourceslogback.xml :

<configuration> 

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d %5p %40.40c:%4L - %m%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="org.neo4j.ogm" level="debug" /> 
    <logger name="org.springframework" level="warn" /> 
    <logger name="org.springframework.data.neo4j" level="debug" /> 
    <root level="debug"> 
     <appender-ref ref="console" /> 
    </root> 

</configuration> 

src/test/resourcescom.neo4j.test :

012,318,514,
+0

을 참조하십시오. 연결 가능성을 통해 추가되었습니다. 시험 합격. – digx1