簡體   English   中英

Spring-Data-Neo4j:倉庫findAll()方法異常在org.neo4j.kernel.TopLevelTransaction.markAsRollbackOnly處

[英]Spring-Data-Neo4j: Repository findAll() method exception `at org.neo4j.kernel.TopLevelTransaction.markAsRollbackOnly`

我正在嘗試使用Spring-Data-Neo4j , Version = 3.2.1.RELEASE 當我使用存儲庫中的findAll()方法獲取節點時,出現了異常,如下所示:

java.lang.NullPointerException
at org.neo4j.kernel.TopLevelTransaction.markAsRollbackOnly(TopLevelTransaction.java:93)
at org.neo4j.kernel.TopLevelTransaction.failure(TopLevelTransaction.java:86)
at org.neo4j.cypher.internal.spi.v2_1.TransactionBoundQueryContext.close(TransactionBoundQueryContext.scala:65)
at org.neo4j.cypher.internal.compiler.v2_1.spi.DelegatingQueryContext.close(DelegatingQueryContext.scala:38)
at org.neo4j.cypher.internal.compiler.v2_1.spi.ExceptionTranslatingQueryContext.org$neo4j$cypher$internal$compiler$v2_1$spi$ExceptionTranslatingQueryContext$$super$close(ExceptionTranslatingQueryContext.scala:34)
at org.neo4j.cypher.internal.compiler.v2_1.spi.ExceptionTranslatingQueryContext$$anonfun$close$1.apply$mcV$sp(ExceptionTranslatingQueryContext.scala:34)
at org.neo4j.cypher.internal.compiler.v2_1.spi.ExceptionTranslatingQueryContext$$anonfun$close$1.apply(ExceptionTranslatingQueryContext.scala:34)
at org.neo4j.cypher.internal.compiler.v2_1.spi.ExceptionTranslatingQueryContext$$anonfun$close$1.apply(ExceptionTranslatingQueryContext.scala:34)
at org.neo4j.cypher.internal.compiler.v2_1.spi.ExceptionTranslatingQueryContext.org$neo4j$cypher$internal$compiler$v2_1$spi$ExceptionTranslatingQueryContext$$translateException(ExceptionTranslatingQueryContext.scala:152)
at org.neo4j.cypher.internal.compiler.v2_1.spi.ExceptionTranslatingQueryContext.close(ExceptionTranslatingQueryContext.scala:34)
at org.neo4j.cypher.internal.compiler.v2_1.spi.DelegatingQueryContext.close(DelegatingQueryContext.scala:38)
at org.neo4j.cypher.internal.compiler.v2_1.executionplan.ExecutionWorkflowBuilder$$anonfun$runWithQueryState$1.apply(ExecutionPlanBuilder.scala:164)
at org.neo4j.cypher.internal.compiler.v2_1.executionplan.ExecutionWorkflowBuilder$$anonfun$runWithQueryState$1.apply(ExecutionPlanBuilder.scala:164)
at org.neo4j.cypher.internal.compiler.v2_1.TaskCloser$$anonfun$1.apply(TaskCloser.scala:43)
at org.neo4j.cypher.internal.compiler.v2_1.TaskCloser$$anonfun$1.apply(TaskCloser.scala:41)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
at org.neo4j.cypher.internal.compiler.v2_1.TaskCloser.close(TaskCloser.scala:40)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator$$anonfun$close$1.apply$mcV$sp(ClosingIterator.scala:67)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator$$anonfun$close$1.apply(ClosingIterator.scala:67)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator$$anonfun$close$1.apply(ClosingIterator.scala:67)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator$$anonfun$translateException$1.apply(ClosingIterator.scala:72)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator.decoratedCypherException(ClosingIterator.scala:102)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator.translateException(ClosingIterator.scala:70)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator.close(ClosingIterator.scala:66)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator$$anonfun$failIfThrows$1.apply(ClosingIterator.scala:96)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator.decoratedCypherException(ClosingIterator.scala:102)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator.failIfThrows(ClosingIterator.scala:91)
at org.neo4j.cypher.internal.compiler.v2_1.ClosingIterator.next(ClosingIterator.scala:44)
at org.neo4j.cypher.internal.compiler.v2_1.PipeExecutionResult.next(PipeExecutionResult.scala:169)
at org.neo4j.cypher.internal.compiler.v2_1.PipeExecutionResult.next(PipeExecutionResult.scala:35)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
at scala.collection.convert.Wrappers$IteratorWrapper.next(Wrappers.scala:30)
at org.neo4j.cypher.internal.compiler.v2_1.PipeExecutionResult$$anon$1.next(PipeExecutionResult.scala:77)
at org.neo4j.helpers.collection.IteratorWrapper.next(IteratorWrapper.java:47)
at org.neo4j.helpers.collection.IteratorWrapper.next(IteratorWrapper.java:47)
at java.lang.Iterable.forEach(Iterable.java:74)
at com.harmeetsingh13.service.impl.PersonServiceImpl.getAllPersons(PersonServiceImpl.java:48)
at com.harmeetsingh13.controller.PersonController.makeFriends(PersonController.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)

此異常與交易有關。 當我在Google上搜索時,有很多關於此異常的問題,但是有些使用@Transactional注釋解決了問題。 我也在嘗試使用此注釋,但仍然面臨相同的錯誤。 以下是我的代碼和配置。

@Service
@Transactional
public class PersonServiceImpl implements PersonService{

@Autowired
private RepositoryPerson repositoryPerson;
@Autowired
private Neo4jTemplate template;

@Override
public Person save(Person entity) {
    return repositoryPerson.save(entity);
}

@Override
public Person findPersonByProperty(String property, Object value) {
    return repositoryPerson.findBySchemaPropertyValue(property, value);
}

@Override
public List<Person> getAllPersons() {
    Result<Person> persons = repositoryPerson.findAll();
    List<Person> personsList = new ArrayList<>();
    persons.forEach(person -> personsList.add(person));
    return personsList;
}
}

組態:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages={"com.harmeetsingh13.entities", "com.harmeetsingh13.maintainrelationship"})
@PropertySource(value="classpath:properties/db.properties")
@EnableNeo4jRepositories(basePackages = "com.harmeetsingh13.repository")
public class Neo4jConfig extends Neo4jAspectConfiguration{

@Resource
private Environment env; 

public Neo4jConfig() {
    setBasePackage("com.harmeetsingh13.entities");
}

@Bean(name="graphDatabaseService")
public GraphDatabaseService getGraphDatabaseService(){
    GraphDatabaseFactory databaseService = new GraphDatabaseFactory();
    return databaseService.newEmbeddedDatabase(env.getProperty("db.store.directory"));
}

private JtaTransactionManagerFactoryBean neo4jTransactionManagerFactoryBean() throws Exception {
    JtaTransactionManagerFactoryBean factoryBean = 
            new JtaTransactionManagerFactoryBean(getGraphDatabaseService());
    return factoryBean;
}

@Override
@Bean(name= {"transactionManager"})
public PlatformTransactionManager neo4jTransactionManager() throws Exception {
    ChainedTransactionManager transactionManager = new ChainedTransactionManager(neo4jTransactionManagerFactoryBean().getObject());
    return transactionManager;
}
}

當我嘗試運行測試用例時,測試用例成功運行。 以下是我的測試用例的代碼。

@Test
@Transactional
public void findAllNodes(){
    Result<Person> persons = actorRepo.findAll(); 
    persons.forEach(person -> System.out.println(person));
}

參見https://jira.spring.io/browse/DATAGRAPH-531

這僅在嵌入式neo4j數據庫中發生; 不是REST變體。

簡而言之,在將結果對象傳遞到下一層之前,請確保將所有內容都轉換為列表/集合等。

請參閱下面的示例測試方法

try (Transaction graphDBTransaction = graphDatabaseService.beginTx()) {

  final Collection collection = personRepository.findAll().as(Collection.class);
  final int size = collection.size();

  assertThat("Total number of persons in test data-set should be 5!", size, equalTo(5));
  graphDBTransaction.success();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM