Java Spring JPA数据存储库无法为扩展Crudepository的接口创建bean

Java Spring JPA数据存储库无法为扩展Crudepository的接口创建bean,java,spring,hibernate,spring-data,spring-data-jpa,Java,Spring,Hibernate,Spring Data,Spring Data Jpa,我在使用SpringJPA存储库时遇到了问题。我创造了: 基本用户域类(@Entity) 扩展crudepository 以及服务层实现 当我运行项目时,由于UserDao的bean创建异常,它失败了。据我所知,SpringJPA存储库负责为这个接口创建bean(因为它扩展了crudepository),并在需要的地方注入它 这就是我得到的错误: 警告: org.springframework.web.context.support.AnnotationConfigWebApplicatio

我在使用SpringJPA存储库时遇到了问题。我创造了:

  • 基本用户域类(
    @Entity
  • 扩展
    crudepository
  • 以及服务层实现
当我运行项目时,由于
UserDao
的bean创建异常,它失败了。据我所知,SpringJPA存储库负责为这个接口创建bean(因为它扩展了
crudepository
),并在需要的地方注入它

这就是我得到的错误:

警告: org.springframework.web.context.support.AnnotationConfigWebApplicationContext -上下文初始化期间遇到异常-取消刷新尝试 org.springframework.beans.factory.BeanCreationException:错误 创建名为“UserController”的bean:自动连线的注入 依赖关系失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法 autowire字段:private edu.sjsu.services.UserService edu.sjsu.controllers.UserController.userService;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“userServiceImpl”的bean:自动连线的注入 依赖关系失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法 autowire字段:edu.sjsu.models.UserDao edu.sjsu.services.userserviceinpl.userDao;嵌套异常是 org.springframework.beans.factory.noSuchBean定义异常:否 为找到[edu.sjsu.models.UserDao]类型的限定bean 依赖项:至少需要1个符合autowire条件的bean 此依赖项的候选项。依赖项批注: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor.PostProcessPropertyValue(AutoWiredNotationBeanPostProcessor.java:334)

UserDao.Java:

package edu.sjsu.models;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;

public interface UserDao extends CrudRepository<User, Long> {}
JpaConfig.java
如果使用Spring JPA,我甚至不需要这个配置类,但我还是按照指南和教程创建了这个配置类

@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
public class JpaConfig {

    @Bean
    public DataSource dataSource() {
        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        return builder.setType(EmbeddedDatabaseType.HSQL).build();
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);

        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("edu.sjsu");
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();

        return factory.getObject();
    }

    @Bean
    public PlatformTransactionManager transactionManager() {

        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory());
        return txManager;
    }   

}

如果您需要其他配置类和java类来了解这种情况,请告诉我。

EnableJpaRepositories
中使用
basePackages

@Configuration
@EnableJpaRepositories(basePackages = "edu.sjsu.models")
@EnableTransactionManagement
public class JpaConfig { ... }

默认情况下,
EnableJpaRepositories
将扫描带注释配置类的包以查找Spring数据存储库。因为,我猜,您的配置和存储库类位于不同的包中,所以您应该告诉Spring Data JPA要扫描哪些基本包才能找到JPA存储库。

我已经明确地将包设置为factory.setPackagesToScan(“edu.sjsu”);这是为了你的实体。这些都用
@Entity
注释。它起作用了。我必须做的另一件事是从pom中删除额外的依赖项hibernate-jpa-2.0-api,因为org.hibernate-hibernate entitymanager已经在编译hibernate-jpa-2.1-api了。谢谢AliAli-您能就这个问题提供指导吗?
@Configuration
@EnableJpaRepositories(basePackages = "edu.sjsu.models")
@EnableTransactionManagement
public class JpaConfig { ... }