簡體   English   中英

Spring JPA Data Repository無法為擴展CrudRepository的接口創建bean

[英]Spring JPA Data Repository failed to create bean for interface that extends CrudRepository

我在使用Spring JPA存儲庫時遇到問題。 我創造了:

  • 一個基本的用戶域類( @Entity ),
  • 的接口UserDao延伸CrudRepository
  • 和服務層實現。

當我運行項目時,由於UserDao的bean創建異常而UserDao 據我所知,Spring JPA存儲庫負責為此接口創建bean(因為它擴展了CrudRepository )並將其注入到需要的任何地方。

這是我得到的錯誤:

警告:org.springframework.web.context.support.AnnotationConfigWebApplicationContext - 在上下文初始化期間遇到異常 - 取消刷新嘗試org.springframework.beans.factory.BeanCreationException:創建名為'UserController'的bean時出錯:注入自動連接的依賴項失敗; 嵌套異常是org.springframework.beans.factory.BeanCreationException:無法自動裝配字段:private edu.sjsu.services.UserService edu.sjsu.controllers.UserController.userService; 嵌套異常是org.springframework.beans.factory.BeanCreationException:創建名為'userServiceImpl'的bean時出錯:注入自動連接的依賴項失敗; 嵌套異常是org.springframework.beans.factory.BeanCreationException:無法自動裝配字段:edu.sjsu.models.UserDao edu.sjsu.services.UserServiceImpl.userDao; 嵌套異常是org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有為依賴項找到[edu.sjsu.models.UserDao]類型的限定bean:期望至少有一個bean符合此依賴關系的autowire候選資格。 依賴注釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.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> {}

RootConfig.Java:

@Configuration
@ComponentScan(basePackages={"edu.sjsu"}, excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)})
@Import(JpaConfig.class)
public class RootConfig {}

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類來了解情況,請告訴我。

使用basePackagesEnableJpaRepositories

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

默認情況下, EnableJpaRepositories將掃描Spring Data存儲庫的帶注釋配置類的包。 因為,我猜,您的配置和存儲庫類在不同的包中,您應該告訴Spring Data JPA要掃描哪些基礎包以便找到JPA存儲庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM