我有一个 JpaRepository 接口,当它位于与包含 @ComponentScan 的主类不同的包中时,Spring 数据未实现(或注入?)。
我的包结构(仅用于演示错误):
- org.demo.jpa.myapp
Application.java
- org.demo.jpa.repo
MyDomainObject.java
MyRepository.java
MyRepository.java
public interface MyRepository extends JpaRepository<MyDomainObject, Long> { }
应用程序.java
@Configuration
@ComponentScan(basePackages="org.demo.jpa")
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Application.class, args);
if (context.getBean(MyRepository.class) == null){
throw new NullPointerException("repo was not initialized!");
}
}
}
例外情况
Exception in thread "main" 2014-09-01 11:20:26.336 INFO 6156 --- [ main] org.demo.jpa.myapp.Application : Started Application in 2.824 seconds (JVM running for
3.362)
2014-09-01 11:20:26.339 INFO 6156 --- [ Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContex
t@5d50b632: startup date [Mon Sep 01 11:20:23 EDT 2014]; root of context hierarchy
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.demo.jpa.repo.MyRepository] is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:319)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
at org.demo.jpa.myapp.Application.main(Application.java:17)
这个错误是没有抛出当 MyRepository 和 MyDomainObject 与 Application 类位于同一包中时。
这是使用 spring-boot-starter-parent 1.1.5.RELEASE 和 spring-boot-starter-data-jpa。
这可能是预期的行为(请参阅文档在这里)。包装内含@EnableAutoConfiguration
实际上是两者的默认猜测@EnableJpaRepostories
and @EntityScan
。如果这些包与主自动配置包分离,则您将需要这两个包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)