SDN Neo4J Cypher查询中可能存在的Spring数据错误
下面的查询应该返回按desc顺序按“followers”编号排序的帐户,并有一个限制 它采用2个变量作为参数(maxCount和limit)。MaxCount指的是追随者的数量。因此,如果maxCount为100,则只返回追随者少于100的帐户 如果我在Spring Data Neo4j应用程序中运行此查询。它似乎忽略了maxCount约束,例如,如果我将maxCount设置为2,并且account1有3个跟随者,account2有1个跟随者。它似乎错误地返回了两个帐户,而它应该只返回只有一个跟随者的account2 质疑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个跟随者。它似乎错误地返回了两个帐户,而它应该只返回只有一个跟
@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试试吗?你可能需要这个:进行设置。是吗你运行示例应用程序吗?是的。它与那些版本一起工作。我刚刚更新了快照,但结果相同。请参阅修改后的示例应用程序。它是通过可达性添加的。测试通过。它是通过可达性添加的。测试通过。