没有类型为“org.springframework.data.jpa.repository.support.JpaEntityInformation”的合格 bean

0 java spring repository entitymanager spring-data-jpa

我正在尝试通过 BaseRepository 接口和 BaseRepositoryImpl 扩展 **SimpleJpaRepository **。
\nTha BaseRepositoryImpl 扩展 **SimpleJpaRepository ** 并实现 BaseRepository。

\n\n

此外,我还有一些其他存储库,例如扩展了 BaseRepository 的 CandidateRepository 和 EmployeeRepository。

\n\n

下面您可以看到错误后的代码:

\n\n

要查看项目结构,请单击此处

\n\n
    @NoRepositoryBean  \n    public interface BaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID>{\n//..\n}\n\n\n@Repository\npublic abstract class BaseRepositoryImpl<T, ID extends Serializable> extends \n                                                    SimpleJpaRepository<T, ID> implements BaseRepository<T, ID>{\n\n    private final EntityManager em;\n\n    public BaseRepositoryImpl(JpaEntityInformation<T,ID> entityInformation, \n                                EntityManager entityManager) {\n\n      super(entityInformation, entityManager);\n      this.em = entityManager;\n\n  }\n  //..\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

扩展存储库:

\n\n
@NoRepositoryBean\n    public interface CandidateRepository extends BaseRepository<DatCandidate, UUID>{\n\n        //..\n    }\n\n\n@Repository(value="CandidateRepositoryImpl")\npublic class CandidateRepositoryImpl extends BaseRepositoryImpl<DatCandidate, UUID> implements CandidateRepository{\n\n\n    public CandidateRepositoryImpl(\n            JpaEntityInformation<DatCandidate, UUID> entityInformation,\n            EntityManager entityManager) {\n\n        super(entityInformation, entityManager);\n\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的配置:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<beans xmlns="http://www.springframework.org/schema/beans"\n    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n    xmlns:tx="http://www.springframework.org/schema/tx"\n    xmlns:context="http://www.springframework.org/schema/context"\n    xmlns:jpa="http://www.springframework.org/schema/data/jpa"\n    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\n        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd\n        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd\n        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">\n\n    <context:annotation-config />\n    <context:component-scan base-package="com.projects"></context:component-scan>\n\n    <jpa:repositories base-package="com.projects.repositories.impl" \n    base-class="com.projects.repositories.impl.BaseRepositoryImpl"></jpa:repositories>\n\n    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />\n\n    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">\n        <property name="persistenceUnitName" value="punit" />\n        <property name="dataSource" ref="dataSource" />\n        <property name="jpaVendorAdapter">\n            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">\n                <property name="showSql" value="true" />\n            </bean>\n        </property>\n        <property name="jpaPropertyMap">\n            <map>\n                <entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />\n                <entry key="hibernate.hbm2ddl.auto" value="none"/>\n                <entry key="hibernate.format_sql" value="true" />\n            </map>\n        </property>\n    </bean>\n\n    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">\n        <property name="entityManagerFactory" ref="entityManagerFactory"/>\n    </bean>\n\n    <tx:annotation-driven transaction-manager="transactionManager"/>\n\n    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">\n        <property name="driverClassName" value="com.mysql.jdbc.Driver" />\n        <property name="url" value="jdbc:mysql://localhost:3306/relocationdb?autoReconnect=true" />\n        <property name="username" value="root"></property>\n        <property name="password" value="1234" />\n    </bean>\n\n\n</beans>\n
Run Code Online (Sandbox Code Playgroud)\n\n

服务:

\n\n
@Service(value="CandidateServiceImpl")\npublic class CandidateServiceImpl extends BaseServiceImpl<CandidateForCreationDto, CandidateDto,DatCandidate, UUID> \n                                implements CandidateService{\n\n    private CandidateRepositoryImpl  candidateRepository;\n\n        @Autowired\n    public CandidateServiceImpl (\n            @Qualifier("CandidateRepositoryImpl") JpaRepository<DatCandidate, UUID> candidateRepository\n            ) {\n        this.candidateRepository = (CandidateRepositoryImpl)candidateRepository;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误:

\n\n
\n

通过构造函数参数 0 表示不满足的依赖关系;\n 嵌套异常为\n org.springframework.beans.factory.NoSuchBeanDefinitionException: No\n 类型的限定 bean\n \'org.springframework.data.jpa.repository.support.JpaEntityInformation\ ' 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{}

\n
\n\n

我遵循了 Spring JPA 文档,但无法理解该错误

\n\n

附上运行代码

\n\n
\n

下午 4:39:10 org.hibernate.Version logVersion 信息:HHH000412:Hibernate\n 核心 {5.2.12.Final} 2018 年 3 月 21 日下午 4:39:10\n org.hibernate.cfg.Environment 信息:HHH000206: \n hibernate.properties 未找到 2018 年 3 月 21 日下午 4:39:10\n org.hibernate.annotations.common.reflection.java.JavaReflectionManager\n 信息:HCANN000001:Hibernate Commons 注释\n {5.0.1.Final} 2018年3月21日下午4:39:12 org.hibernate.dialect.Dialect\n信息:HHH000400:使用方言:\n org.hibernate.dialect.MySQL5InnoDBDialect 2018年3月21日下午4:39:16\n org.apache .catalina.core.StandardContext ListenerStart 严重:\n 异常发送上下文初始化事件到 org.springframework.web.context.ContextLoaderListener 类的侦听器实例\n org.springframework.beans.factory.UnsatisfiedDependencyException:\n 创建 bean 时出错name \'candidateController\':通过字段 \'candidateBaseService\' 表达的不满足\n依赖关系;嵌套\n异常是\n org.springframework.beans.factory.UnsatisfiedDependencyException:\n创建文件中定义的名为\'CandidateServiceImpl\'的bean时出错\n [C:\\Users\\alon\\Documents\\workspace- sts-3.9.2.RELEASE.metadata.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\Relocation\\WEB-INF\\classes\\com\\projects\\service\\ impl\\CandidateServiceImpl.class]:\n 通过构造函数参数 0 表示不满足的依赖关系;\n 嵌套异常为\n org.springframework.beans.factory.UnsatisfiedDependencyException:\n 创建名称为“CandidateRepositoryImpl”的 bean 时定义于\ n 文件\n [C:\\Users\\alon\\Documents\\workspace-sts-3.9.2.RELEASE.metadata.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\ Relocation\\WEB-INF\\classes\\com\\projects\\repositories\\impl\\CandidateRepositoryImpl.class]:\n 通过构造函数参数 0 表达的不满足的依赖关系;\n 嵌套异常为\n org.springframework.beans .factory.NoSuchBeanDefinitionException:没有\n \n \n \'org.springframework.data.jpa.repository.support.JpaEntityInformation\' 类型的合格 bean 可用:预计至少有 1 个有资格\n 作为自动装配候选者的 bean。依赖注释:{} at\n org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587)\n at\n org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata .java:91)\n 在\n org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373)\n 在\n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory .java:1344)\n 在\n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)\n 在\n org.springframework.beans.factory.support。\n 通过构造函数参数 0 表示不满足的依赖关系;\n 嵌套异常为\n org.springframework.beans.factory.NoSuchBeanDefinitionException:没有\n 类型的限定 bean\n \'org.springframework.data.jpa.repository.support。 JpaEntityInformation\' 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{} at\n org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:729)\n at\n org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java :192)\n在\n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1270)\n在\n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java :1127)\ n在\ n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)\ n在\ n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java :502)\n 在\n org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)\n 在\n org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton( DefaultSingletonBeanRegistry.java:228)\n 在\n org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)\n 在\n org.springframework.beans.factory.support.AbstractBeanFactory.getBean( AbstractBeanFactory.java:200)\n 在\n org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251)\n 在\n org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency( DefaultListableBeanFactory.java:1138)\n 在\n org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)\n 在\n org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement。注入(AutowiredAnnotationBeanPostProcessor.java:584)\n ... 24个以上 原因:\n org.springframework.beans.factory.UnsatisfiedDependencyException:\n 创建名为\'CandidateRepositoryImpl\'的bean时在\n文件中定义\n [ C:\\Users\\alon\\Documents\\workspace-sts-3.9.2.RELEASE.metadata.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\Relocation\\WEB- INF\\classes\\com\\projects\\repositories\\impl\\CandidateRepositoryImpl.class]:\n 通过构造函数参数 0 表达的不满足的依赖关系;\n 嵌套异常为\n org.springframework.beans.factory.NoSuchBeanDefinitionException:没有\n \n \'org.springframework.data.jpa.repository.support.JpaEntityInformation\' 类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{} at\n org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:729)\n at\n org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java :192)\n在\n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1270)\n在\n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java :1127)\ n在\ n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)\ n在\ n org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java :502)\n 在\n org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)\n 在\n org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton( DefaultSingletonBeanRegistry.java:228)\n 在\n org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)\n 在\n org.springframework.beans.factory.support.AbstractBeanFactory.getBean( AbstractBeanFactory.java:200)\n 在\n org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251)\n 在\n org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency( DefaultListableBeanFactory.java:1138)\n 在\n org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)\n 在\n org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument( ConstructorResolver.java:815)\n at\n org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:721)\n ... 37 更多 原因:\n org.springframework.beans.factory .NoSuchBeanDefinitionException:没有\n\n\n\n\'org.springframework.data.jpa.repository.support.JpaEntityInformation\'类型的合格bean:预计至少有1个符合\n自动装配候选者的bean。依赖注释:{} at\n org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1509)\n at\n org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java :1104)\ n在\ n org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)\ n在\ n org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java :815)\n 位于\n org.springframework.beans.factory.support.ConstructorResolver。

\n\n

\xd7\x9e\xd7\xa8\xd7\xa5 21, 2018 4:39:16 PM org.apache.catalina.core.StandardContext\n startInternal 严重:一个或多个侦听器无法启动。完整\n 详细信息可在相应的容器日志文件 \xd7\x9e\xd7\xa8\xd7\xa5 21,\n 2018 4:39:16 PM org.apache.catalina.core.StandardContext startInternal\n 严重:由于之前的错误,上下文 [/Relocation] 启动失败\n \xd7\x9e\xd7\xa8\xd7\xa5 21, 2018 4:39:16 PM org.apache.catalina.core.ApplicationContext\n 日志信息:关闭 Spring root WebApplicationContext \xd7\x9e\xd7\xa8\xd7\xa5 21, 2018\n 4:39:16 PM org.apache.catalina.loader.WebappClassLoaderBase\n clearReferencesJdbc 严重:Web 应用程序 [/Relocation]\n 注册了JDBC 驱动程序 [com.mysql.jdbc.Driver] 但在 Web 应用程序停止时无法取消注册。\n 为了防止内存泄漏,已强制取消注册 JDBC 驱动程序。\xd7\x9e\xd7\xa8\xd7\xa5 21,\n 2018 4:39:16 PM org.apache.catalina.loader.WebappClassLoaderBase\n clearReferencesThreads 严重:Web 应用程序 [/Relocation]\n 似乎已启动名为 [Abandoned connection cleanup\n thread] 的线程,但未能停止它。这很可能会造成内存泄漏。\n \xd7\x9e\xd7\xa8\xd7\xa5 21, 2018 4:39:16 PM\n org.apache.coyote.AbstractProtocol 启动信息:启动\n ProtocolHandler ["http-bio-8080"] \xd7\x9e \xd7\xa8\xd7\xa5 21, 2018 4:39:16 PM\n org.apache.coyote.AbstractProtocol 启动信息:启动\n ProtocolHandler ["ajp-bio-8009"] \xd7\x9e\xd7\xa8 \xd7\xa5 21, 2018 4:39:16 PM\n org.apache.catalina.startup.Catalina start INFO: 服务器启动\n 17422 ms

\n
\n

Jen*_*der 5

你在这里做了一些奇怪的事情组合。

一方面,您可以通过使用@NoRepositoryBeanon CandidateRepository并提供您自己的实现来有效禁用所有 Spring Data 内容。但是,您的实现是基于扩展的SimpleJpaRepository<T, ID>,它是 Spring Data 的核心组件,但由于您基本上禁用了它,所以它没有正确配置。

我想你是时候下定决心了:

  1. 您想更改 提供的行为吗SimpleJpaRepository<T, ID>?可能会向您的基本实现添加方法。

    如果是这样,请扩展它,保留构造函数不变并将其用作您的repositoryBaseClass. 这是如何执行此操作的教程

  2. 只需为一个(或某些)存储库提供自定义实现。然后使用自定义实现