【发布时间】:2014-05-16 20:28:59
【问题描述】:
我想使用 spring-data-jpa 和 CrudRepository<T, ID extends Serializable>。但我不能让它自动接线。 (同一包中的所有其他服务均已正确连接):
@Service
public class UserService {
@Resource
private UserRepo repo;
//this does neither work
//@Autowired
//private CrudRepository<User, Long> repo;
}
public interface UserRepo extends CrudRepository<User, Long> {
}
@Entity
public class User {
@Id
private Long id;
}
结果:
引起:org.springframework.beans.factory.BeanCreationException: 创建名为“userService”的 bean 时出错:资源注入 依赖失败;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 为依赖找到了类型为 [UserRepo] 的合格 bean:预计在 至少 1 个有资格作为自动装配候选者的 bean 依赖。依赖注解: {@javax.annotation.Resource(shareable=true, mappedName=, description=, 名称=,类型=类 java.lang.Object,查找=, authenticationType=CONTAINER)}
这里可能有什么问题?
从文档中我认为它应该可以在不编写实现的情况下工作:
在典型的 Java 应用程序中,您希望编写一个类 实现 CustomerRepository。但这就是 Spring Data JPA 的原因 如此强大:您不必编写 存储接口。 Spring Data JPA 在 运行应用程序时飞起来。
更新 SpringConfig:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("my.package")
public class AppConfig {
@Bean
public LocalContainerEntityManagerFactoryBean emf() throws ClassNotFoundException, PropertyVetoException {
LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(dataSource());
emf.setPackagesToScan("my.package");
emf.setJpaVendorAdapter(jpaAdapter());
emf.setJpaProperties(jpaProterties());
return emf;
}
}
结果:缺少 emf,这很奇怪,因为我已经有工作的 DAO 服务,我可以毫无问题地自动连接 EntityManager 和 EMF。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1a6e658': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:336)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:632)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:442)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:276)
... 50 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:641)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1159)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:282)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
... 58 more
【问题讨论】:
-
你有 UserRepo 的实现吗?
-
不,我想使用这个spring接口提供的默认查询映射。
-
请发布您的 Spring 配置。您是否启用了存储库支持?
-
不,我没有。虽然没有帮助,但请参阅上面的更新
-
您应该将其命名为 entityManagerFactory 或将 entity-manager-factory-ref 更改为“emf”
标签: java spring spring-data-jpa