Java Spring数据存储库-没有合格的bean注入
我不熟悉Spring框架。 我刚刚开始学习以下各种指南(),并试图完成有关web服务的完整教程() 我对JPA数据源定义很感兴趣,因为我得到了以下错误Java Spring数据存储库-没有合格的bean注入,java,spring,dependency-injection,spring-data-jpa,autowired,Java,Spring,Dependency Injection,Spring Data Jpa,Autowired,我不熟悉Spring框架。 我刚刚开始学习以下各种指南(),并试图完成有关web服务的完整教程() 我对JPA数据源定义很感兴趣,因为我得到了以下错误 Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'init' defined in main.Application: Unsatisfied dep
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'init' defined in main.Application: Unsatisfied dependency expressed through constructor argument with index 0 of type [bookmarks.AccountRepository]: : No qualifying bean of type [bookmarks.AccountRepository] found for dependency: 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 [bookmarks.AccountRepository] found for dependency: 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)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:464)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1111)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1006)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:961)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:950)
at main.Application.main(Application.java:41)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [bookmarks.AccountRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
... 18 more
我的主要应用程序类如下
@配置
@组件扫描
@启用自动配置
公共类应用程序{
@豆子
public CommandLineRunner init(AccountRepository AccountRepository,
书签存储库(书签存储库){
System.out.println(“Bean!”);
return(evt)->Arrays.asList(
“jhoeller、dsyer、pwebb、ogierke、rwinch、mfisher、mpollack、jlong”。拆分(“,”)
弗雷奇先生(
a->{
Account Account=accountRepository.save(新帐户),
“密码”);
bookmarkRepository.save(新书签)(帐户、,
"http://bookmark.com/1/“+a,“描述”);
bookmarkRepository.save(新书签)(帐户、,
"http://bookmark.com/2/“+a,“描述”);
});
}
公共静态void main(字符串[]args){
SpringApplication.run(Application.class,args);
}
我的pom.xml是
4.0.0
组织测试
演示
0.0.1
罐子
演示
SpringBoot的演示项目
org.springframework.boot
spring启动程序父级
1.2.1.发布
UTF-8
demo.demo应用程序
1.8
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧起动试验
测试
org.springframework.boot
spring引导启动器数据jpa
org.springframework.data
spring数据jpa
com.h2数据库
氢
javax.inject
javax.inject
1.
org.springframework.boot
springbootmaven插件
我知道依赖注入框架没有找到AccountRepository接口的任何实现,它看起来像
公共接口AccountRepository扩展了JpaRepository{
可选findByUsername(字符串用户名);
}
但是这个框架应该为JpaRepository提供“一个正确的实现”,这是我不理解的部分
任何帮助都将不胜感激,特别是在该框架中深入研究的地方
谢谢
更新
将@EnableJpaRepositories(“书签”)添加到应用程序类中,解决了bean解析问题
原因:java.lang.IllegalArgumentException:不是托管类型:类bookmarks.Account
我的帐户实体类是
import javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.Id;
导入javax.persistence.OneToMany;
导入com.fasterxml.jackson.annotation.JsonIgnore;
@实体
公共类帐户{
@杰索尼奥雷
公共字符串密码;
公共字符串用户名;
@OneToMany(mappedBy=“账户”)
private Set bookmarks=new HashSet();
@Id@GeneratedValue
私人长id;
公共帐户(字符串名称、字符串密码){
this.username=名称;
this.password=密码;
}
帐户(){}//仅限jpa
//接球手和接球手
}
要让框架选择JPA存储,您需要在配置中启用它-添加
@EnableJpaRepositories("your.package.with.jpa.repositories")
在@配置
文件中
upd 以下是jpa存储库的示例配置:
@Bean
public DataSource dataSource(){
// configure your datasource
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
emfb.setDataSource(dataSource);
emfb.setPackagesToScan("your.package.with.model");
emfb.setJpaVendorAdapter(jpaVendorAdapter());
emfb.setJpaPropertyMap(jpaPropertiesMap());
return emfb;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
return new HibernateJpaVendorAdapter();
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
public Map<String, ?> jpaPropertiesMap() {
Properties properties = new Properties();
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); // assumption based on your pom-file
properties.setProperty("hibernate.hbm2ddl.auto", "..."); // you need to google for appropriate option
return properties;
}
@Bean
公共数据源数据源(){
//配置您的数据源
}
@豆子
公共LocalContainerEntityManagerFactoryBean entityManagerFactory(数据源数据源){
LocalContainerEntityManagerFactoryBean emfb=新的LocalContainerEntityManagerFactoryBean();
emfb.setDataSource(数据源);
emfb.setPackagesToScan(“您的.package.with.model”);
setJpaVendorAdapter(jpaVendorAdapter());
setjpapPropertyMap(jpapPropertiesMap());
返回emfb;
}
@豆子
公共JpaVendorAdapter JpaVendorAdapter(){
返回新的HibernateJavaEndorapter();
}
@豆子
公共平台transactionManager transactionManager(EntityManager工厂emf){
JpaTransactionManager transactionManager=新的JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
返回事务管理器;
}
公共地图JPAPPropertiesMap(){
属性=新属性();
properties.setProperty(“hibernate.dialent”、“org.hibernate.dialent.h2dialent”);//基于pom文件的假设
properties.setProperty(“hibernate.hbm2ddl.auto”,“…”;//您需要在谷歌上搜索合适的选项
归还财产;
}
解决问题的最终(工作)配置如下(仅在文档之后)
解决方案是添加
com.h2数据库
氢
在pom.xml中,并更改
@OneToMany(mappedBy=“account”)
private Set bookmarks=new HashSet();
在Account类中(错误为:mappedBy=“Account”,大写字母…)
完整代码如下:
pom.xml
4.0.0
组织测试
演示
0.0.1-快照
罐子
MyRestService
SpringBoot的演示项目
org.springframework.boot
spring启动程序父级
1.2.1.发布
UTF-8
demo.MyRestServiceApplication
1.8
org.springframework.boot