Neo4j 从SDN 4.0迁移到SDN 4.1.RC1时发生GraphQueryLookupStrategy.resolveQuery异常
我正在将我的应用程序迁移到使用SDN 4.1.0.RC1的过程中,但在尝试启动应用程序后遇到了一些问题。我已经进行了必要的配置更改,以便在远程服务器(localhost:7474)上正确使用HTTPDriver,并且在启动应用程序时,在尝试加载spring上下文时,我的一个存储库出现以下错误Neo4j 从SDN 4.0迁移到SDN 4.1.RC1时发生GraphQueryLookupStrategy.resolveQuery异常,neo4j,spring-boot,spring-data-neo4j,spring-data-neo4j-4,Neo4j,Spring Boot,Spring Data Neo4j,Spring Data Neo4j 4,我正在将我的应用程序迁移到使用SDN 4.1.0.RC1的过程中,但在尝试启动应用程序后遇到了一些问题。我已经进行了必要的配置更改,以便在远程服务器(localhost:7474)上正确使用HTTPDriver,并且在启动应用程序时,在尝试加载spring上下文时,我的一个存储库出现以下错误 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.data.neo4j.repository.query.GraphQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
... 32 common frames omitted
Caused by: java.lang.AbstractMethodError: org.springframework.data.neo4j.repository.query.GraphQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:416)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:206)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:251)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:237)
at org.springframework.data.neo4j.repository.support.GraphRepositoryFactoryBean.afterPropertiesSet(GraphRepositoryFactoryBean.java:43)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 42 common frames omitted
看来我的QueryLookupStrategy需要一个方法RepositoryQuery resolveQuery(方法方法,RepositoryMetadata,NamedQueries NamedQueries)代码>要实现,但显然不是。我假设这现在是一个依赖性问题,并将进一步研究Spring数据的版本,以符合SDN
/*
* Copyright 2008-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.repository.query;
import java.lang.reflect.Method;
import java.util.Locale;
import org.springframework.data.repository.core.NamedQueries;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.util.StringUtils;
/**
* Strategy interface for which way to lookup {@link RepositoryQuery}s.
*
* @author Oliver Gierke
*/
public interface QueryLookupStrategy {
public static enum Key {
CREATE, USE_DECLARED_QUERY, CREATE_IF_NOT_FOUND;
/**
* Returns a strategy key from the given XML value.
*
* @param xml
* @return a strategy key from the given XML value
*/
public static Key create(String xml) {
if (!StringUtils.hasText(xml)) {
return null;
}
return valueOf(xml.toUpperCase(Locale.US).replace("-", "_"));
}
}
/**
* Resolves a {@link RepositoryQuery} from the given {@link QueryMethod} that can be executed afterwards.
*
* @param method
* @param metadata
* @param namedQueries
* @return
*/
RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, NamedQueries namedQueries);
}
好吧,如果你遇到这个问题,有一个非常直接的方法来解决它。请参阅上的文档。此异常是由与spring数据共享模块的版本冲突引起的。neo4j在版本4.1.0.RC1中实现的接口已更改,因此引发此异常
要解决此问题,请使用弹簧数据释放序列BOM,并将其设置为释放Hopper-RC1。由于我使用gradle,说明如下,但您也可以在上面的链接中找到它们
相关构建脚本简化
buildscript {
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:0.4.0.RELEASE"
}
}
apply plugin: "io.spring.dependency-management"
dependencyManagement {
imports {
mavenBom 'org.springframework.data:spring-data-releasetrain:Hopper-RC1'
}
}
dependencies {
compile 'org.springframework.data:spring-data-neo4j:4.1.0.RC1'
}repositories {
maven {
url 'https://repo.spring.io/libs-milestone'
}
}
干杯
史蒂夫为Maven用户详细介绍了@Holycowzer的答案。将以下行添加到builds POM.xml中。请注意,这将位于主
标记集之外
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Hopper-SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
org.springframework.data
弹簧数据释放装置
料斗-SR1
聚甲醛
进口
我注意到一些导入在执行此操作时中断,只需在POM中显式地将它们作为依赖项添加,所有内容都应按预期工作。这很有效。到现在为止,您可以使用料斗释放,这仍然有效。
buildscript {
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:0.4.0.RELEASE"
}
}
apply plugin: "io.spring.dependency-management"
dependencyManagement {
imports {
mavenBom 'org.springframework.data:spring-data-releasetrain:Hopper-RC1'
}
}
dependencies {
compile 'org.springframework.data:spring-data-neo4j:4.1.0.RC1'
}repositories {
maven {
url 'https://repo.spring.io/libs-milestone'
}
}
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Hopper-SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>