无法自动接线。找不到“存储库”类型的bean

时间:2019-01-22 12:34:52

标签: java spring spring-boot intellij-idea spring-data-jpa

我正在使用Spring Data Jpa,这是我的项目结构:

App
  ConfigPackage
    MyConfig
  ServicePackage
    MyService
  RepositoryPackage
    MyRepository

这里是MyRepository

public interface MyRepository extends JpaRepository<MyEntity, Long> {
}

这里是MyService

@Service
public class MyService {

    @Autowired
    private MyRepository myRepository; <---here

    ...
}

这里是MyConfig

@Configuration
@EnableJpaRepositories(
        basePackages = "RepositoryPackage",
        entityManagerFactoryRef = "xxx",
        transactionManagerRef = "xxx"
)
public class MyConfig {
}

我使用@AutowiredMyRepository注入MyService,但是IntelliJ总是抱怨

  

无法自动接线。找不到“ MyRepository”类型的豆

即使代码可以编译并成功运行。

为什么IntelliJ无法识别这不是错误?如何清除IntelliJ的警告?

IntelliJ版本:2018.2.6

6 个答案:

答案 0 :(得分:2)

  

请注意,这适用于IntelliJ IDEA 2018.3.3 Ultimate Edition(但也应适用于其他版本)

我注意到,当配置使用@ComponentScan并因此加载另一个用@Configuration注释的类时,就会发生此错误(至少在我的项目中)。 IntelliJ似乎无法完全识别它,从而导致错误/警告:

  1. 单击顶部文件夹中的文件结构
  2. 按F4
  3. 转到“模块”
  4. 从列表中选择IntelliJ抱怨的模块
  5. 点击“春季”
  6. 点击加号图标
  7. 选择提供您的xRepository
  8. 的配置
  9. 保存

答案 1 :(得分:2)

Intellij可能在@EnableJpaRepositories批注中对您的软件包名称有疑问。您可以在未定义任何basePackages属性的情况下尝试将该注释放入主Spring类吗?

@EnableJpaRepositories(entityManagerFactoryRef = "xxx", transactionManagerRef = "xxx")
@SpringBootApplication
public class FooApplication {

    public static void main(String[] args) {
        SpringApplication.run(FooApplication.class, args);
    }
}

您的主要Spring课应该是课程的根源

root
  ServicePackage
    MyService
  RepositoryPackage
    MyRepository
  FooApplication <---- main class here

答案 2 :(得分:0)

您可以声明:

@SuppressWarnings("SpringJavaAutowiringInspection")

在现场,或通过Intellij的代码检查取消警告(单击红色灯泡,您可以在现场或整个班级取消“为Bean类自动装配”。

答案 3 :(得分:0)

在数据库配置中,您必须声明基本软件包:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "postgreEntityManager",
        transactionManagerRef = "postgreTransactionManager",
        basePackages = "fr.lab.test.dao"
)
public class PostGreDBConfig {

答案 4 :(得分:0)

尝试:

@Configuration
@ComponentScan(basePackages = {"your repository package}")

答案 5 :(得分:0)

我曾经遇到过同样的问题,但是 只需更改项目结构并将MyRepository移到您拥有服务的相同软件包中即可。我不知道为什么会这样。