gpt4 book ai didi

java - Spring JPA Data Repository 无法为扩展 CrudRepository 的接口(interface)创建 bean

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:24 25 4
gpt4 key购买 nike

我在使用 Spring JPA 存储库时遇到问题。我创建了:

  • 一个基本的用户领域类(@Entity),
  • 一个接口(interface) UserDao 扩展 CrudRepository
  • 和服务层实现。

当我运行项目时,由于 UserDao 的 bean 创建异常而失败。据我所知,Spring JPA 存储库负责为此接口(interface)创建 bean(因为它扩展了 CrudRepository)并将其注入(inject)到需要的地方。

这是我遇到的错误:

WARN : org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.sjsu.services.UserService edu.sjsu.controllers.UserController.userService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: edu.sjsu.models.UserDao edu.sjsu.services.UserServiceImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.sjsu.models.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at 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 类来了解情况,请告诉我。

最佳答案

EnableJpaRepositories中使用basePackages:

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

默认情况下,EnableJpaRepositories会扫描Spring Data repositories注解配置类的包。因为,我猜,你的配置和存储库类在不同的包中,你应该告诉 Spring Data JPA 要扫描哪些基础包以找到 JPA 存储库。

关于java - Spring JPA Data Repository 无法为扩展 CrudRepository 的接口(interface)创建 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36353349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com