ここではコードです:ここでは春データのNeo4jの4.2.0.RELEASEのカスタムクエリ発行し
@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;
}
Spring構成:
@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>
スプリングデータによって提供されるデフォルトの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:私はテストのためにTESTSERVERを使用しています:
protected static TestServer testServer;
@BeforeClass
public static void setupTestServer() {
testServer = new TestServer.Builder().port(2222).build();
}
それは本当に問題doesntの、そう言うことができます動作します。私はちょうど私の設定が実際に動作することを確認するためにdbから唯一の人のノードをフェッチするために、最も単純な可能なクエリを実行したい。 Btw、あなたの提案がうまくいかない - 'org.springframework.dao.InvalidDataAccessResourceUsageException:Cypher" Neo.ClientError.Statement.SyntaxError "を実行中にエラーが発生しました。コード:Neo.ClientError.Statement.SyntaxError;説明:無効な入力 '=':識別子文字、空白、 ':' 'が期待されます。 @create( "MATCH(p:Person)WHERE p.firstName = {0} RETURN p") '何もしない –