2016-09-22 98 views
1

我有一个控制器,我自动装配库:为什么自动装配弹簧储存库不起作用?

@Controller 
@RequestMapping("/account") 
@EnableJpaRepositories 
public class AccountController { 

    @Autowired 
    private AccountRepository accountRepo; 

//methods 

} 

我的仓库扩展CrudRepository

@Repository 
public interface AccountRepository extends CrudRepository<Account, Integer> { 

    Account findOne(int primaryKey); 
} 

我使用XML来配置我的项目。这里是:

<jpa:repositories base-package="com.library.repositories" 
     entity-manager-factory-ref="entityManager"></jpa:repositories> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManager" /> 
    </bean> 

    <bean id="entityManager" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.library.entities" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <!-- <prop key="hibernate.hbm2ddl.auto">create-drop</prop> --> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/library" /> 
     <property name="username" value="root" /> 
     <property name="password" value="root" /> 
    </bean> 

为什么它不起作用?我收到的错误是AccountController无法自动调用Bean AccountRepository。

编辑 我已经将我的配置重构为基于注释的,并且一切正常。在我的XML版本中,我可能没有扫描一些类,并导致错误。

+1

共享完整的堆栈跟踪 – sidgate

+0

是由组件扫描设置覆盖的存储库软件包? – guchuan

回答

2

可能是你需要有@EnableJpaRepositories注释上的配置类@Configuration注释,而不是控制器类。

此外,请确保您的配置类在扫描的软件包下。

+1

并在这里提示:-)在春季项目中不再需要XML(最后!)。我最近做了一个100%免费的XML。甚至web.xml文件也不再需要,而且这是在WebSphere服务器上。 – drekka