我正在使用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 {
}
我使用@Autowired
向MyRepository
注入MyService
,但是IntelliJ总是抱怨
无法自动接线。找不到“ MyRepository”类型的豆
即使代码可以编译并成功运行。
为什么IntelliJ无法识别这不是错误?如何清除IntelliJ的警告?
IntelliJ版本:2018.2.6
答案 0 :(得分:2)
请注意,这适用于IntelliJ IDEA 2018.3.3 Ultimate Edition(但也应适用于其他版本)
我注意到,当配置使用@ComponentScan
并因此加载另一个用@Configuration
注释的类时,就会发生此错误(至少在我的项目中)。 IntelliJ似乎无法完全识别它,从而导致错误/警告:
xRepository
答案 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移到您拥有服务的相同软件包中即可。我不知道为什么会这样。