2016-10-25 31 views
0

我有一個CRUD庫接口@Autowired找不到庫豆

@Repository 
public interface SampleRepository extends CrudRepository<Metadata, String> { 
    findById(UUID id); 
} 

I am trying to use it in my test class which is in another package 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {TestConfig.class}) 
@WebAppConfiguration 
public class SampleRepositoryTest { 

    @Autowired 
    private SampleRepository sampleRepository; 

它說沒有用SampleRepository bean定義中。任何人都可以幫我解釋爲什麼我不能自動裝入這個存儲庫

+1

您的'TestConfig'類是否啓用Spring Data JPA並執行回購掃描? – CollinD

+0

有點需要看到該配置。 (而且'@ Repository'完全沒有必要。) – chrylis

+0

我該怎麼做? – user1733735

回答

1

正如評論中所述:@Repository對於您的SampleRepository不是必需的。 @WebAppConfiguration上的測試也看起來很怪異。但這兩個都沒問題。

更重要的是:即使不向您提供您的TestContext.java文件,它應該是這樣的:

@Configuration 
// be sure to provide base package where your repostories are located 
@EnableJpaRepositories(basePackages = { 
    "com.acme.repositories" 
}) 
public class TestContext { 
    // your datasource 
    @Bean 
    public DataSource dataSource() { 
    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
    return builder.setType(EmbeddedDatabaseType.HSQL).build(); 
    } 

    // your entity manager factory 
    @Bean 
    public EntityManagerFactory entityManagerFactory() { 

    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
    vendorAdapter.setGenerateDdl(true); 

    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
    factory.setJpaVendorAdapter(vendorAdapter); 
    // your domain classes package 
    factory.setPackagesToScan("com.acme.domain"); 
    factory.setDataSource(dataSource()); 
    factory.afterPropertiesSet(); 

    return factory.getObject(); 
    } 

    // your jpa transaction manager 
    @Bean 
    public PlatformTransactionManager transactionManager() { 
    JpaTransactionManager txManager = new JpaTransactionManager(); 
    txManager.setEntityManagerFactory(entityManagerFactory()); 
    return txManager; 
    } 
} 
+0

我有一個類似的問題沒有獲得自動裝配的jpa存儲庫。我可以說除了這個以外,其他的非我。 「EnableJpaRepositories」是關鍵。非常感謝。 – Jayesh

0

@Repository是沒有必要的。您的代碼應該是這樣的:

public interface SampleRepository extends CrudRepository<Metadata, String> { 
@Query(value = "select * from db.tabel where id = :id", nativeQuery = true) 
findById(@Param("id") UUID id); 
} 
相關問題