Mr.*_*iik -5 java jpa repository maven spring-data-jpa
我有一个 Maven 项目。pom.xml:
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\n <modelVersion>4.0.0</modelVersion>\n\n <groupId>root</groupId>\n <artifactId>CourseWork5</artifactId>\n <version>0.0.1-SNAPSHOT</version>\n <packaging>jar</packaging>\n\n <name>coursework</name>\n <description></description>\n\n <parent>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-parent</artifactId>\n <version>1.4.0.RELEASE</version>\n <relativePath/> <!-- lookup parent from repository -->\n </parent>\n\n <properties>\n <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n <java.version>1.8</java.version>\n </properties>\n\n <dependencies>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-data-jpa</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-security</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-web</artifactId>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-thymeleaf</artifactId>\n </dependency>\n <dependency>\n <groupId>mysql</groupId>\n <artifactId>mysql-connector-java</artifactId>\n <scope>runtime</scope>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-test</artifactId>\n <scope>test</scope>\n </dependency>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-devtools</artifactId>\n </dependency>\n\n <dependency>\n <groupId>org.springframework.security</groupId>\n <artifactId>spring-security-config</artifactId>\n </dependency>\n <dependency>\n <groupId>org.thymeleaf.extras</groupId>\n <artifactId>thymeleaf-extras-springsecurity4</artifactId>\n </dependency>\n <dependency>\n <groupId>commons-io</groupId>\n <artifactId>commons-io</artifactId>\n <version>2.2</version>\n </dependency>\n </dependencies>\n\n <build>\n <plugins>\n <plugin>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-maven-plugin</artifactId>\n </plugin>\n </plugins>\n </build>\n</project>\nRun Code Online (Sandbox Code Playgroud)\n另外,我有一个实体地址。
\npackage root.entity;\nimport javax.persistence.*;\n\n@Entity\n@Table(name = "Address")\npublic class Address {\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n我有这个条目的存储库。
\npackage root.repository;\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\nimport root.entity.Address;\n\n@Repository\npublic interface AddressRepository extends JpaRepository<Address, Integer> {\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n以及带有实现的服务接口。
\npackage root.service.interfaces;\nimport root.entity.Address;\npublic interface AddressServiceInterface {\n ...\n}\n\npackage root.service;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport root.entity.Address;\nimport root.repository.AddressRepository;\nimport root.service.interfaces.AddressServiceInterface;\n\n@Service\npublic class AddressService implements AddressServiceInterface{\n ...\n}\nRun Code Online (Sandbox Code Playgroud)\n我的 application.properties 文件:
\n#DB properties:\ndb.driver=com.mysql.jdbc.Driver\ndb.url=jdbc:mysql://localhost:3306/labsdb?useSSL=false\ndb.username=root\ndb.password=rootPassword\n\xc2\xa0\n#Hibernate Configuration:\ndb.hibernate.dialect=org.hibernate.dialect.MySQLDialect\ndb.hibernate.show_sql=true\ndb.entitymanager.packages.to.scan=root.entity\ndb.hibernate.hbm2ddl.auto = create\n\nspring.datasource.driverClassName=com.mysql.jdbc.Driver\nspring.datasource.url=jdbc:mysql://localhost:3306/labsdb\nspring.datasource.username=root\nspring.datasource.password=rootPassword\n\nsecurity.require-ssl=false\nRun Code Online (Sandbox Code Playgroud)\n我的启动文件:
\npackage root;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n@SpringBootApplication\npublic class TestApp {\n public static void main(String[] args) {\n SpringApplication.run(TestApp.class, args);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n但是,运行应用程序后出现错误:
\norg.springframework.beans.factory.UnsatisfiedDependencyException:\nError creating bean with name 'addressController': Unsatisfied\ndependency expressed through field 'service'; nested exception is\norg.springframework.beans.factory.UnsatisfiedDependencyException:\nError creating bean with name 'addressService': Unsatisfied dependency\nexpressed through field 'repository'; nested exception is\norg.springframework.beans.factory.BeanCreationException: Error\ncreating bean with name 'addressRepository': Invocation of init method\nfailed; nested exception is java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:592)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:370)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:754)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)\n~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)\n~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)\n~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] at\norg.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] at\norg.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] at\norg.springframework.boot.SpringApplication.run(SpringApplication.java:313)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] at\norg.springframework.boot.SpringApplication.run(SpringApplication.java:1185)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] at\norg.springframework.boot.SpringApplication.run(SpringApplication.java:1174)\n[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] at\nroot.TestApp.main(TestApp.java:10) [classes/:na] at\nsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n~[na:1.8.0_65] at\nsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n~[na:1.8.0_65] at\nsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n~[na:1.8.0_65] at java.lang.reflect.Method.invoke(Method.java:497)\n~[na:1.8.0_65] at\norg.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)\n[spring-boot-devtools-1.4.0.RELEASE.jar:1.4.0.RELEASE] Caused by:\norg.springframework.beans.factory.UnsatisfiedDependencyException:\nError creating bean with name 'addressService': Unsatisfied dependency\nexpressed through field 'repository'; nested exception is\norg.springframework.beans.factory.BeanCreationException: Error\ncreating bean with name 'addressRepository': Invocation of init method\nfailed; nested exception is java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:592)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:370)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1131)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:589)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] ... 24 common frames\nomitted Caused by:\norg.springframework.beans.factory.BeanCreationException: Error\ncreating bean with name 'addressRepository': Invocation of init method\nfailed; nested exception is java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1131)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:589)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] ... 37 common frames\nomitted Caused by: java.lang.AbstractMethodError:\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getTargetRepository(Lorg/springframework/data/repository/core/RepositoryInformation;)Ljava/lang/Object;\n at\norg.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:199)\n~[spring-data-commons-1.12.2.RELEASE.jar:na] at\norg.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:266)\n~[spring-data-commons-1.12.2.RELEASE.jar:na] at\norg.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252)\n~[spring-data-commons-1.12.2.RELEASE.jar:na] at\norg.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:84)\n~[spring-data-jpa-1.3.3.jar:na] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] at\norg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579)\n~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] ... 47 common frames\nomitted\nRun Code Online (Sandbox Code Playgroud)\n请帮助我。\n我有一个具有相同结构和逻辑的简单应用程序,但它运行良好。所以,我不知道如何解决这个问题。
\n小智 7
添加@NoRepositoryBean到您的CrudRepository. 这将允许自动配置仍然发生,而无需手动设置组件扫描基础包。
该接口org.springframework.data.repository.Repository是实际 Spring 数据存储库的标记。由于您的CrudRepository扩展Repositoryspring 正在尝试初始化一个名为crudRepositoryfor T(本质上翻译为 Object)的 Spring 托管存储库。由于对象不受 Hibernate 管理,因此在启动时验证失败并崩溃。
@NoRepositoryBean将告诉 Spring 不要为实现Repository.