在自定义查询方法定义上抛出

在自定义查询方法定义上抛出

本文介绍了Spring CrudRepository 在自定义查询方法定义上抛出 AbstractMethodError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在扩展 CrudRepository 接口的接口中创建自定义查询.不幸的是,每次我收到 java.lang.AbstractMethodError 时,出于某种原因.请参阅下面的完整堆栈跟踪.
据我了解,问题在于 Spring 框架应该神奇地"为我的方法声明创建一个实现,但由于某种原因它没有实现.

I'm trying to create a custom query in an interface which extends the CrudRepository interface. Unfortunately for some reason every time I receive a java.lang.AbstractMethodError. Please see the full stack trace below.
As far as I understand, the problem is that Spring framework should "magically" create an implementation to my method declaration, but for some reason it doesn't make it.

存储库接口:

public interface PresentationRepository extends CrudRepository<Presentation, Integer> {
    Iterable<Presentation> findAll(Sort sort);
    Page<Presentation> findAll(Pageable pageable);

    List<Presentation> findByTitle(String title); // the problematic line
}

呈现实体类:

@Entity
@Table(name = "presentation")
public class Presentation {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "presentation_id")
    Integer id;
    String title;
    String logo;
    @Column(name = "length")
    Integer interval;
    @Column(name = "pages")
    Integer pageCount;
    Date created;
    Date modified;
    Date approved;
    Date published;
    Date deleted;
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(
            name = "presentation_filters",
            joinColumns = @JoinColumn(name = "presentation_id"),
            inverseJoinColumns = @JoinColumn(name = "filter_id")
    )
    List<Filter> filters;

    public Presentation() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

// OTHER GETTERS AND SETTERS FOR EVERY ATTRIBUTE

    public Map<FilterGroup, List<Filter>> getGroupedFilters() {
        Map<FilterGroup, List<Filter>> grouppedFilters = new HashMap<>();
        for (Filter filter : filters ) {
            if(!grouppedFilters.containsKey(filter.getGroup())) {
                grouppedFilters.put(filter.getGroup(), new ArrayList<>());
            }
            grouppedFilters.get(filter.getGroup()).add(filter);
        }
        return grouppedFilters;
    }
}

堆栈跟踪:

2016-05-15 15:33:51.452  INFO 16939 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate Core {4.3.11.Final}
2016-05-15 15:33:51.455  INFO 16939 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2016-05-15 15:33:51.458  INFO 16939 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2016-05-15 15:33:51.924  INFO 16939 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2016-05-15 15:33:52.326  INFO 16939 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2016-05-15 15:33:52.580  INFO 16939 --- [  restartedMain] o.h.h.i.ast.ASTQueryTranslatorFactory    : HHH000397: Using ASTQueryTranslatorFactory
2016-05-15 15:33:53.038  INFO 16939 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaUpdate  : HHH000228: Running hbm2ddl schema update
2016-05-15 15:33:53.038  INFO 16939 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaUpdate  : HHH000102: Fetching database metadata
2016-05-15 15:33:53.040  INFO 16939 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaUpdate  : HHH000396: Updating schema
2016-05-15 15:33:53.069  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000261: Table found: SuperCLM.filter
2016-05-15 15:33:53.069  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000037: Columns: [filter_id, name, filter_group_id]
2016-05-15 15:33:53.069  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000108: Foreign keys: [fk_alrwu05pj4i5155391v1uq1m9]
2016-05-15 15:33:53.070  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000126: Indexes: [filter_group_id, primary]
2016-05-15 15:33:53.089  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000261: Table found: SuperCLM.filter_group
2016-05-15 15:33:53.093  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000037: Columns: [name, filter_group_id, order]
2016-05-15 15:33:53.093  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000108: Foreign keys: []
2016-05-15 15:33:53.093  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000126: Indexes: [primary]
2016-05-15 15:33:53.109  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000261: Table found: SuperCLM.presentation
2016-05-15 15:33:53.109  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000037: Columns: [approved, pages, deleted, created, length, logo, modified, published, title, presentation_id]
2016-05-15 15:33:53.109  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000108: Foreign keys: []
2016-05-15 15:33:53.110  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000126: Indexes: [primary]
2016-05-15 15:33:53.121  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000261: Table found: SuperCLM.presentation_filters
2016-05-15 15:33:53.122  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000037: Columns: [filter_id, presentation_filter_id, presentation_id]
2016-05-15 15:33:53.122  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000108: Foreign keys: [presentation_filters_ibfk_2, presentation_filters_ibfk_1]
2016-05-15 15:33:53.122  INFO 16939 --- [  restartedMain] o.hibernate.tool.hbm2ddl.TableMetadata   : HHH000126: Indexes: [filter_id, presentation_id, primary]
2016-05-15 15:33:53.125  INFO 16939 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaUpdate  : HHH000232: Schema update complete
2016-05-15 15:33:53.750  WARN 16939 --- [  restartedMain] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'presentationController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: hu.bme.aut.lovasgergely.superclm.server.dao.PresentationRepository hu.bme.aut.lovasgergely.superclm.server.controller.PresentationController.presentationRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'presentationRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/springframework/data/projection/ProjectionFactory;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
2016-05-15 15:33:53.752  INFO 16939 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2016-05-15 15:33:53.781  INFO 16939 --- [  restartedMain] o.apache.catalina.core.StandardService   : Stopping service Tomcat
2016-05-15 15:33:53.810 ERROR 16939 --- [  restartedMain] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'presentationController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: hu.bme.aut.lovasgergely.superclm.server.dao.PresentationRepository hu.bme.aut.lovasgergely.superclm.server.controller.PresentationController.presentationRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'presentationRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/springframework/data/projection/ProjectionFactory;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at hu.bme.aut.lovasgergely.superclm.server.ServerApplication.main(ServerApplication.java:10) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.3.3.RELEASE.jar:1.3.3.RELEASE]
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: hu.bme.aut.lovasgergely.superclm.server.dao.PresentationRepository hu.bme.aut.lovasgergely.superclm.server.controller.PresentationController.presentationRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'presentationRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/springframework/data/projection/ProjectionFactory;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    ... 22 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'presentationRepository': Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/springframework/data/projection/ProjectionFactory;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    ... 24 common frames omitted
Caused by: java.lang.AbstractMethodError: org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/springframework/data/projection/ProjectionFactory;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:435) ~[spring-data-commons-1.12.1.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220) ~[spring-data-commons-1.12.1.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:266) ~[spring-data-commons-1.12.1.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252) ~[spring-data-commons-1.12.1.RELEASE.jar:na]
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) ~[spring-data-jpa-1.9.4.RELEASE.jar:na]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    ... 34 common frames omitted

2016-05-15 15:33:53.815  INFO 16939 --- [  restartedMain] .b.l.ClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/Users/lovas/Projects/SuperCLM/Program/server/target/classes/]

推荐答案

这个问题可能是由于您的 Spring Data Commons jar 和 Spring Data JPA jar 不兼容而引起的.请使用 mvn dependency:tree 命令检查这一点.

This issue might be arising due to an incompatibility of your Spring Data Commons jar and Spring Data JPA jars. Please check this using mvn dependency:tree command.

这篇关于Spring CrudRepository 在自定义查询方法定义上抛出 AbstractMethodError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 21:25