SDN Neo4J Cypher查询中可能存在的Spring数据错误

SDN Neo4J Cypher查询中可能存在的Spring数据错误,neo4j,spring-data,spring-data-neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data,Spring Data Neo4j,Spring Data Neo4j 4,Neo4j Ogm,下面的查询应该返回按desc顺序按“followers”编号排序的帐户,并有一个限制 它采用2个变量作为参数(maxCount和limit)。MaxCount指的是追随者的数量。因此,如果maxCount为100,则只返回追随者少于100的帐户 如果我在Spring Data Neo4j应用程序中运行此查询。它似乎忽略了maxCount约束,例如,如果我将maxCount设置为2,并且account1有3个跟随者,account2有1个跟随者。它似乎错误地返回了两个帐户,而它应该只返回只有一个跟

下面的查询应该返回按desc顺序按“followers”编号排序的帐户,并有一个限制

它采用2个变量作为参数(maxCount和limit)。MaxCount指的是追随者的数量。因此,如果maxCount为100,则只返回追随者少于100的帐户

如果我在Spring Data Neo4j应用程序中运行此查询。它似乎忽略了maxCount约束,例如,如果我将maxCount设置为2,并且account1有3个跟随者,account2有1个跟随者。它似乎错误地返回了两个帐户,而它应该只返回只有一个跟随者的account2

质疑


@Query(“匹配(a:帐户)这是您为使用新版本而更新的代码。两个测试都通过了。我已经重写了您的测试和模型,使其更符合我们的文档和示例。请记住,OGM可以通过可访问性持久化。希望这有助于您解决问题。我已经在此处解释了如何使用Spring数据编写事务类型测试:

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/java
com.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/java
com.neo4j.relation.model

@NodeEntity
public class Account {

    @GraphId
    private Long id;

    private String name;

    @Relationship(type = "FOLLOWS",
            direction = Relationship.OUTGOING)
    private Set<Account> following = new HashSet<Account>();

    @Relationship(type = "FOLLOWS",
            direction = Relationship.INCOMING)
    private Set<Account> followers = new HashSet<Account>();

    private Account() {
    }

    private Account(String name) {
        this.name = name;
    }

    public static Account newAccountInstance(String name) {
        return new Account(name);
    }

    //Accessors
    public Long getId() {
        return id;
    }

    public Set<Account> getFollowers() {
        return followers;
    }

    public String getName() {
        return name;
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Id: ").append(getId()).append(", ");
        sb.append("Name: ").append(getName()).append(", ");
        return sb.toString();
    }
}
src/test/resources
logback.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>

这是您为使用新版本而更新的代码。两个测试都通过了。我已经重写了您的测试和模型,使其更符合我们的文档和示例。请记住,OGM可以通过可访问性持久化。希望这有助于您解决问题。我已经在此处解释了如何使用Spring数据编写事务类型测试:

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/java
com.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/java
com.neo4j.relation.model

@NodeEntity
public class Account {

    @GraphId
    private Long id;

    private String name;

    @Relationship(type = "FOLLOWS",
            direction = Relationship.OUTGOING)
    private Set<Account> following = new HashSet<Account>();

    @Relationship(type = "FOLLOWS",
            direction = Relationship.INCOMING)
    private Set<Account> followers = new HashSet<Account>();

    private Account() {
    }

    private Account(String name) {
        this.name = name;
    }

    public static Account newAccountInstance(String name) {
        return new Account(name);
    }

    //Accessors
    public Long getId() {
        return id;
    }

    public Set<Account> getFollowers() {
        return followers;
    }

    public String getName() {
        return name;
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Id: ").append(getId()).append(", ");
        sb.append("Name: ").append(getName()).append(", ");
        return sb.toString();
    }
}
src/test/resources
logback.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>

你能用SDN 4.2.0.BUILD-SNAPSHOT和OGM 2.1.0-SNAPSHOT试试吗?你可能需要这个:进行设置。你运行过示例应用吗?是的。它可以用那些版本。我刚刚更新了快照,但结果相同。查看修改过的示例应用你能用SDN 4.2.0.BUILD-SNAPSHOT和OGM 2.1.0-SNAPSHOT试试吗?你可能需要这个:进行设置。是吗你运行示例应用程序吗?是的。它与那些版本一起工作。我刚刚更新了快照,但结果相同。请参阅修改后的示例应用程序。它是通过可达性添加的。测试通过。它是通过可达性添加的。测试通过。