2013-10-10 2 views
1

Я получаю следующее исключение @ выполненияНет квалификационная рожкового типа ... не определено сообщение об ошибке на одном из моих репозиториев классов

Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mbc.receiptprinter.repository.AddressRepository] is defined 

Мой интерфейс AddressRepository определяется следующим образом:

package com.mbc.receiptprinter.repository; 

import org.springframework.data.jpa.repository.JpaRepository; 

import com.mbc.receiptprinter.model.Address; 

public interface AddressRepository extends JpaRepository<Address, Long> { 

} 

Это мой AppConfig:

package com.mbc.receiptprinter.config; 

import org.hibernate.ejb.HibernatePersistence; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.core.env.Environment; 
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

import javax.annotation.Resource; 
import javax.sql.DataSource; 
import java.util.Properties; 

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories 
@PropertySource("classpath:Application.properties") 
public class AppConfig { 

    private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver"; 
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password"; 
    private static final String PROPERTY_NAME_DATABASE_URL = "db.url"; 
    private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username"; 

    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect"; 
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql"; 
    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan"; 

    @Resource 
    private Environment env; 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 

     dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER)); 
     dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL)); 
     dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME)); 
     dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD)); 

     return dataSource; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactoryBean.setDataSource(dataSource()); 
     entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class); 
     entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN)); 
     entityManagerFactoryBean.setJpaProperties(hibProperties()); 
     return entityManagerFactoryBean; 
    } 

    private Properties hibProperties() { 
     Properties properties = new Properties(); 
     properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT)); 
     properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL)); 
     return properties; 
    } 

    @Bean 
    public JpaTransactionManager transactionManager() { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); 
     return transactionManager; 
    } 
} 

И Application.properties:

#DB properties: 
db.driver=com.mysql.jdbc.Driver 
db.url=jdbc:mysql://localhost:3306/mbc 
db.username=someuser 
db.password=somepass 

#Hibernate Configuration: 
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
hibernate.show_sql=true 
entitymanager.packages.to.scan=com.mbc.receiptprinter 

Любые идеи, что мне не хватает, чтобы этот репозиторий был распознан? Я использую IntelliJ как свою IDE.

ответ

3

По умолчанию EnableJpaRepositories сканирует пакет аннотированного класса для хранилищ данных. Вместо этого используйте свой атрибут basePackages, чтобы указать com.mbc.receiptprinter.repository.

+0

По-прежнему получаю сообщение об ошибке, когда я это делаю ... '@EnableJpaRepositories (" basePackages: com.mbc.receiptprinter.repository ")' ... Я не помещаю это правильно? Кроме того, следует ли удалить параметр entitymanager.packages.to.scan? –

+0

'@EnableJpaRepositories (basePackages =" com.mbc.receiptprinter.repository ")' исправлено это - спасибо. –

+0

@ZackMacomber Извините, я пропустил редактирование в вашем исходном комментарии. Да, если вы включаете имя атрибута в кавычки '' '', это было бы частью атрибута по умолчанию, который является 'значением', псевдоним для' basePackages'. Пожалуйста. –

Смежные вопросы