2014-09-01 42 views
5

@ComponentScan'ı içeren ana sınıftan ayrı bir pakette olduğunda, Spring verileri tarafından uygulanmayan (veya enjekte edilen?) JpaRepository arabirim var. istisnaJpaRepository, bileşenlerden ayrı pakette uygulanmadığında/enjekte edilmiyor

Application.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!"); 
     } 
    }     
} 

- org.demo.jpa.myapp 
    Application.java 
- org.demo.jpa.repo 
    MyDomainObject.java 
    MyRepository.java 

MyRepository.java

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

: (sadece hatayı gösteren uğruna)

My paket yapısı

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 
[email protected]: 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) 

Bu hata, MyRepository ve MyDomainObject uygulama sınıfı ile aynı pakette olduğunda atılmadığı değil.

Bu, önyükleme başlangıçlı üst 1.1.5.RELEASE ve yay önyükleme başlangıç ​​veri-jpa'sını kullanmaktadır.

cevap

9

Muhtemelen beklenen davranış budur (bkz. docs here). @EnableAutoConfiguration'u içeren paket aslında hem @EnableJpaRepostories hem de @EntityScan için varsayılan tahmintir. Bu paketler ana autoconfig paketinden ayrılırsa gerekecek.

+0

Bu, @ ComponentScan'ın basePackages ile ilgisi yok mu? – gyoder

+0

@EnableJpaRepositories (basePackages = "org.demo.jpa.repo") ekledim, ancak şimdi org.demo.jpa.repo.MyDomainObject için "Yönetilen tipte değil" istisnası alıyorum. Kendi EntityManagerFactory'mi yaratmam ve taranacak paketleri belirlemem gerekecek mi? – gyoder

+1

Hayır, bunun için de @ EntityScan'a ihtiyacınız var (yukarıda bağladığım dokümanlar için). –

İlgili konular