2016-10-25 4 views
0

Ich habe eine Crud Repository-Schnittstelle@Autowired nicht Repository Bohne finden

@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; 

Seine sagt Nein Bohne Definition mit SampleRepository gefunden. Kann mir jemand helfen, warum ich dieses Repository nicht autowire

+1

Aktiviert Ihre 'TestConfig'-Klasse Spring Data JPA und führt Repo-Scans durch? – CollinD

+0

Irgendwie muss ich diese Konfiguration sehen. (Und das '@ Repository' ist völlig unnötig.) – chrylis

+0

Wie kann ich das tun? – user1733735

Antwort

1

Wie in den Kommentaren angegeben: @ Repository für Ihre SampleRepository nicht benötigt wird. @WebAppConfiguration auf dem Test sieht auch komisch aus. Aber beides ist in Ordnung.

Wichtiger: auch wenn Sie nicht vorgesehen sind Ihre TestContext.java Datei, die es so sein sollte:

@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

Ich hatte ein ähnliches Problem mit dem Jpa-Repository, das nicht autowired wird. Ich kann sagen, dass nicht andere außer mir für mich gearbeitet haben. 'EnableJpaRepositories' war der Schlüssel. Danke vielmals. – Jayesh

0

@Repository ist nicht erforderlich. Ihr Code sollte folgendes sein:

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