从 SDN 4.0 迁移到 SDN 4.1.RC1 的 GraphQueryLookupStrategy.resolveQuery 异常 [英] GraphQueryLookupStrategy.resolveQuery exception on migration from SDN 4.0 to SDN 4.1.RC1

查看:15
本文介绍了从 SDN 4.0 迁移到 SDN 4.1.RC1 的 GraphQueryLookupStrategy.resolveQuery 异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将我的应用程序迁移到使用 SDN 4.1.0.RC1,但在尝试启动应用程序后遇到了一些问题.我已经进行了必要的配置更改,以正确使用 HTTPDriver 到我的远程服务器 (localhost:7474),并且在启动应用程序时,我在尝试加载 spring 上下文时,我的存储库之一出现以下错误.

I am in the process of migrating my application to use SDN 4.1.0.RC1 but have encountered a few issues after trying to boot the application. I have made the necessary configuration changes to correctly use the HTTPDriver to my remote server (localhost:7474) and when booting the application I get the following error with one of my repositories while attempting to load the spring context.

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

这个好像要哭的vanilia仓库

This is the vanilia repository that seems to be crying

@Repository
public interface UserRepository extends GraphRepository<User> {

  @Query("MATCH (u:User) where u.authId = {authId} return u limit 1")
  User findOneByAuthId(@Param("authId") Long authId);

}

编辑

看起来可能是spring数据版本和neo4j版本之间的脱节.

It looks like it could be a disconnect between the version of spring data and spring data neo4j.

有问题的 GraphQueryLookupStrategy...

The GraphQueryLookupStrategy in question...

/*
 * Copyright (c)  [2011-2016] "Pivotal Software, Inc." / "Neo Technology" / "Graph Aware Ltd."
 *
 * This product is licensed to you under the Apache License, Version 2.0 (the "License").
 * You may not use this product except in compliance with the License.
 *
 * This product may include a number of subcomponents with
 * separate copyright notices and license terms. Your use of the source
 * code for these subcomponents is subject to the terms and
 * conditions of the subcomponent's license, as noted in the LICENSE file.
 *
 */

package org.springframework.data.neo4j.repository.query;

import org.neo4j.ogm.session.Session;
import org.springframework.data.projection.ProjectionFactory;
import org.springframework.data.repository.core.NamedQueries;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.query.QueryLookupStrategy;
import org.springframework.data.repository.query.RepositoryQuery;

import java.lang.reflect.Method;

/**
 * @author Mark Angrish
 * @author Luanne Misquitta
 * @author Oliver Gierke
 */
public class GraphQueryLookupStrategy implements QueryLookupStrategy {

    private final Session session;

    public GraphQueryLookupStrategy(Session session) {
        this.session = session;
    }

    /* 
     * (non-Javadoc)
     * @see org.springframework.data.repository.query.QueryLookupStrategy#resolveQuery(java.lang.reflect.Method, org.springframework.data.repository.core.RepositoryMetadata, org.springframework.data.projection.ProjectionFactory, org.springframework.data.repository.core.NamedQueries)
     */
    @Override
    public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory,
        NamedQueries namedQueries) {
        return new GraphQueryMethod(method, metadata, factory, session).createQuery();
    }
}

看来我所拥有的 QueryLookupStrategy 正在期待一个方法 RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, NamedQueries namedQueries); 被实现,但显然它不是.我认为这现在是一个依赖问题,并将进一步调查我需要符合 SDN 的 Spring Data 版本

It appears the QueryLookupStrategy I have is expecting a method RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, NamedQueries namedQueries); to be implemented which clearly it is not. I assume this is now a dependency issue and will investigate further with the version of Spring Data I need to be compliant with 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);
}

推荐答案

好的,所以如果你遇到这个问题,有一个非常直接的方法来解决它.请参阅 http://projects.spring.io/spring-data/ 上的文档.此异常是由与 spring 数据公共模块的版本冲突引起的.Neo4j在4.1.0.RC1版本中实现的接口发生了变化,因此抛出了这个异常.

Okay, so if you run into this issue there is a pretty straight forward way to resolve it. Please see the documentation at http://projects.spring.io/spring-data/ . This exception was caused by version conflicts with the spring data commons module. The interface that neo4j implements in version 4.1.0.RC1 has changed and thus this exception is thrown.

要解决使用 Spring Data 发布火车 BOM 并将其设置为发布 Hopper-RC1.由于我使用 gradle,因此说明如下,但您也可以在上面的链接中找到它们.

To Resolve use the Spring Data release train BOM and set it to release Hopper-RC1 . Since I use gradle the instructions are below but you can also find them at the link above.

相关构建脚本简化...

Relevant build script simplified...

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'
    }
}

干杯,

史蒂夫

这篇关于从 SDN 4.0 迁移到 SDN 4.1.RC1 的 GraphQueryLookupStrategy.resolveQuery 异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆