通过 Spring Data JPA 自动生成 RepositoryImpl 时“无法解析匹配的构造函数" [英] 'Could not resolve matching constructor' when auto-generating RepositoryImpl through Spring Data JPA
问题描述
我正在使用 Spring Data Jpa 自动生成一个类来实现我的存储库.
I'm using Spring Data Jpa to automatically generate a class to implement my repository.
但是当我尝试启动容器时,它告诉我 Error 创建名为 'accountRepository' 的 bean:无法解析匹配的构造函数
.
But when I was trying to start the container it told me Error creating bean with name 'accountRepository': Could not resolve matching constructor
.
我的账户
实体:
package com.amastigote.ssp.model;
import javax.persistence.*;
/**
* Created by hwding on 3/22/17.
*/
@Entity
@Table(name = "User")
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String nickName;
private String plainPassword;
public Account() {
}
public Account(String nickName, String plainPassword) {
this.nickName = nickName;
this.plainPassword = plainPassword;
}
public String getNickName() {
return nickName;
}
public String getPlainPassword() {
return plainPassword;
}
public long getId() {
return id;
}
}
Account
的存储库接口:
package com.amastigote.ssp.repo;
import com.amastigote.ssp.model.Account;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* Created by hwding on 3/22/17.
*/
@SuppressWarnings("unchecked")
public interface AccountRepository extends JpaRepository<Account, Long> {
}
Jpa 配置:
package com.amastigote.ssp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
/**
* Created by hwding on 3/23/17.
*/
@Configuration
@EnableJpaRepositories("com.amastigote.ssp.repo")
public class JPAConf {
@Bean
public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean(
DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean
= new LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean
.setDataSource(dataSource);
localContainerEntityManagerFactoryBean
.setJpaVendorAdapter(jpaVendorAdapter);
localContainerEntityManagerFactoryBean
.setPackagesToScan("com.amastigote.ssp.model");
return localContainerEntityManagerFactoryBean;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter
= new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setDatabase(Database.H2);
hibernateJpaVendorAdapter.setShowSql(true);
hibernateJpaVendorAdapter.setGenerateDdl(false);
return hibernateJpaVendorAdapter;
}
@Bean
public JpaTransactionManager jpaTransactionManager(EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
推荐答案
这个错误信息实际上是模棱两可的,因为我使用的是低版本的 spring-data-jpa
(这是由我的 IDE 推荐...).
This error message is ambiguous in fact, for that I'm using a low version of spring-data-jpa
(which is recommended by my IDE...).
在我的项目中添加最新版本后,给出了更具体的提示:
After adding the newest version to my project, a more specific hint was given:
error when creating inner bean '...',
could not found bean named 'entityManagerFactoryBean'.
我注意到我的实体工厂 bean 配置如下:
I noticed that my entity factory bean is configured like:
@Bean
public LocalContainerEntityManagerFactoryBean
localContainerEntityManagerFactoryBean(...) {}
默认情况下,它的 bean 名称是localContainerEntityManagerFactoryBean",这与所需的 entityManagerFactoryBean
不匹配.
By default its bean name is 'localContainerEntityManagerFactoryBean', which does not match the demanded entityManagerFactoryBean
.
解决方案是将 entityManagerFactoryRef = "localContainerEntityManagerFactoryBean"
添加到您的 @EnableJpaRepositories
中,例如:
The Solution is to add entityManagerFactoryRef = "localContainerEntityManagerFactoryBean"
to your @EnableJpaRepositories
, like:
@EnableJpaRepositories(
basePackages = "com.amastigote.ssp.repo",
entityManagerFactoryRef = "localContainerEntityManagerFactoryBean"
)
这篇关于通过 Spring Data JPA 自动生成 RepositoryImpl 时“无法解析匹配的构造函数"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!