2016-08-15 3 views
-1

Es scheint, als ob ich jpa Repositories deaktiviert habe. Lassen Sie sich diese Fehler:Spring JPA Datenscan für Repository funktioniert nicht

SEVERE: StandardWrapper.Throwable org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController' defined in file [C:\Users\jasiu\workspace2.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\BuyMyTime\WEB-INF\classes\web\UserController.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type [data.UserRepository] found for dependency [data.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [data.UserRepository] found for dependency [data.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)

Config:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(basePackages={"data"}) 
@ComponentScan(basePackages={"data"}, 
excludeFilters={ 
    @Filter(type=FilterType.ANNOTATION, value = EnableWebMvc.class) 
}) 
public class RootConfig { 

@Bean 
public JpaTransactionManager transactionManager(EntityManagerFactory emf, DataSource dataSource){ 
    JpaTransactionManager transactionManager = new JpaTransactionManager(); 
    transactionManager.setEntityManagerFactory(emf); 
    transactionManager.setDataSource(dataSource); 
    return transactionManager; 
} 

@Bean 
public DataSource dataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
    dataSource.setUrl("jdbc:mysql://localhost:3306/HelloWorld"); 
    dataSource.setUsername("login"); 
    dataSource.setPassword("haslo"); 
    return dataSource; 
} 

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) { 
    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
    em.setDataSource(dataSource); 
    em.setPackagesToScan("data"); 
    em.setJpaVendorAdapter(jpaVendorAdapter); 
    em.setJpaProperties(additionalProperties()); 
    return em; 
} 

Properties additionalProperties() { 
    Properties properties = new Properties(); 
    //properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); 
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
    return properties; 
} 

@Bean 
public JpaVendorAdapter jpaVendorAdapter(){ 
    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
    //adapter.setDatabase(); 
    adapter.setShowSql(true); 
    adapter.setGenerateDdl(false); 
    adapter.setDatabasePlatform("org.hibernate.dialect.HSQLDialect"); 
    return adapter; 
} 

} 

Repo ist im Paket "data":

@Repository 
@Transactional 
public interface UserRepository extends JpaRepository<User, Long>{ 
    User findByNick(String nick); 
} 

Controller:

@Controller 
public class UserController { 

@Autowired 
protected UserRepository userRepository; 
... 
} 

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.app</groupId> 
    <artifactId>BuyMyTime</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>BuyMyTime Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <spring.version>4.3.1.RELEASE</spring.version> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.3.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
     <version>1.10.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.2.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>1.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf-spring4</artifactId> 
     <version>3.0.0.ALPHA03</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- Spring dependencies --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
    </dependencies> 
    <build> 
    <finalName>BuyMyTime</finalName> 
    </build> 
</project> 

Bitte für jede Hilfe.

+0

'UserRepository' ist im Paket' data' oder '* .data. *'? – ByeBye

+0

Funktioniert es, wenn Sie in '@ EnableJpaRepositories' und' @ ComponentScan' nicht spezifisch sind? –

+0

ByeBye - in Paketdaten funktioniert es für Komponenten, aber nicht für das Repository; Xtreme - wenn ich Details säubere, macht es keinen Unterschied, derselbe Fehler – jasiuuu

Antwort

1

Wie ist Ihre Projektstruktur? Ich habe Ihren Code in einem Projekt mit UserRepository in basepackage.data kopiert und das Repository wurde entdeckt.

Ich denke, es ist, weil Sie Konfig und Daten Kinder unter Standard-Paket haben. Ich habe es geschafft, indem ich Ihre Daten-, Web- und Konfigurationspakete unter einem gemeinsamen Paket verschoben habe.

Hier sind meine Konfiguration Anmerkungen

package basepackage.config; 

@Configuration 
@EnableAutoConfiguration 
@EnableJpaRepositories(basePackages={"basepackage.data"}) 
@EntityScan(basePackageClasses=User.class) 
@ComponentScan(basePackages={"basepackage"}) 
public class MyConfig { 

@Autowired 
private UserRepository repo; 

@PostConstruct 
public void init(){ 
    for(int i=0; i<10; i++){ 
     repo.save(new User("u-"+i)); 
    } 

} 

} 

Sie auch Ihre Scan basePackageClasses unter Verwendung definieren.

@Configuration 
@EnableAutoConfiguration 
@EnableJpaRepositories(basePackageClasses={UserRepository.class}) 
@EntityScan(basePackageClasses=User.class) 
@ComponentScan(basePackages={"basepackage"}) 

Hoffe, dass hilft.

+0

http://i.imgur.com/bQgsoa0.png – jasiuuu

+0

Es funktioniert nicht. Wenn ich Eigenschaften aus Scan-Annotationen entferne, sollte es alle Pakete scannen? Aber es hat auch nicht funktioniert. Ich benutze auch keinen Spring Boot, vielleicht sollte ich anfangen es zu benutzen. – jasiuuu

+0

Wenn ich versuche, AutoConfiguration mit Booten zu verwenden, habe ich: Komponente konnte nicht gestartet werden [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ BuyMyTime]] – jasiuuu

Verwandte Themen