Java Spring数据存储库-没有合格的bean注入

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

我不熟悉Spring框架。 我刚刚开始学习以下各种指南(),并试图完成有关web服务的完整教程()

我对JPA数据源定义很感兴趣,因为我得到了以下错误

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