弹簧数据 neo4j 4.2.0.发布自定义查询问题



这是代码:

@Repository
public interface PersonRepository extends Neo4jRepository<Person, Long> {
    Person findOne(Long id);
    Person findByFirstName(String firstName);
    Person save(Person person);
    boolean exists(Long id);
    List<Person> findAll();
    @Query("MATCH (p:Person) RETURN p")
    Person get(String n);}
    @NodeEntity(label = "Person")
}

这是模型类:

@NodeEntity
public class Person{
    public Person(String firstName, String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }
    public Person(Long id, String firstName, String lastName){
        this(firstName, lastName);
        this.id = id;
    }
    @GraphId
    @Property(name = "id")
    @Index(unique = true)
    @Getter
    private Long id;
    @Getter
    @Property(name = "firstName")
    private String firstName;
    @Getter
    @Property(name = "lastName")
    private String lastName;
}

弹簧配置:

@Configuration
@EnableNeo4jRepositories("my_package.repository")
@EnableTransactionManagement
@ComponentScan("my_package")
public class ApplicationConfiguration {
     @Bean
     public SessionFactory sessionFactory() {
         // with domain entity base package(s)
         return new SessionFactory("my_package.model");
     }
     @Bean
     public Neo4jTransactionManager transactionManager() {
         return new Neo4jTransactionManager(sessionFactory());
     }
 }

Maven pom.xml :

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <lombok.version>1.16.14</lombok.version>
    <spring-data-neo4j.version>4.2.0.RELEASE</spring-data-neo4j.version>
    <lombok.version>1.16.14</lombok.version>
    <spring.version>4.3.7.RELEASE</spring.version>
    <neo4j.version>3.1.2</neo4j.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j</artifactId>
        <version>${spring-data-neo4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-ogm-test</artifactId>
        <version>2.1.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-all</artifactId>
        <version>1.3</version>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Spring 数据提供的默认 CRUD 方法工作正常,但具有自定义 Cypher 查询的方法不起作用。我对Cypher不是很熟悉,但考虑到到目前为止我看到的其他例子,它应该可以工作。我是否缺少一些依赖项或其他东西?以下是引发问题的代码:

@Test
public void testFindFriendsById(){
    Person main = new Person(10L, "mainname", "mainlastnmame");
    personRepository.save(main);
    // here is that custom method from PersonRepository
    // having this query : @Query("MATCH (p:Person) RETURN p")
    Person person = personRepository.get(main.getFirstName());
    assertThat(person, is(notNullValue()));
}

有什么建议吗?

UPD:我正在使用测试服务器进行测试:

protected static TestServer testServer;
@BeforeClass
public static void setupTestServer() {
    testServer = new TestServer.Builder().port(2222).build();
}

所以,事实证明,Spring 不会自动将参数绑定到查询。

@Query("MATCH (p:Person) where p.firstName = {name} return p")
Person get(@Param("name") String name);

这工作正常

方法应该做什么?按名字获取用户?您需要添加过滤器位置:按属性firstName过滤Person

@Query("MATCH (p:Person {firstName={0}}) RETURN p")

最新更新