BeanDefinitionOverrideException,Spring 数据 JPA 和 JDBC beans 冲突
BeanDefinitionOverrideException, Spring Data JPA and JDBC beans conflict
我计划在一个应用程序(一些实体 JPA 和其他 JDBC)中使用 Spring Data JPA 和 JDBC 存储库 Spring 启动 2.1.7.
public interface UserRepository2 extends CrudRepository<User, Integer> {
}
@Entity
@Table(name = "userstab")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String email;
...
}
运行 应用程序我收到错误:
The bean 'userRepository2', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting **spring.main.allow-bean-definition-overriding=true**
Invalid bean definition with name 'userRepository2' defined in null: Cannot register bean definition [Root bean: class [org.springframework.data.**jpa**.repository.support.**JpaRepositoryFactoryBean**]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'userRepository2': There is already [Root bean: class [org.springframework.data.**jdbc**.repository.support.**JdbcRepositoryFactoryBean**];
我试过 Spring 没有 Spring 数据的引导测试应用程序 JDBC => 没问题
我用 spring.main.allow-bean-definition-overriding=true => 没问题
尝试了这个应用程序
因此 Spring Data 从一个存储库接口 中创建了 2 个存储库 bean(JPA 和 JDBC),接口名称为 (userRepository2)。
我不能为这 2 个 repo bean 设置不同的名称,不能使用 spring.main.allow-bean-definition-overriding=true.
为每个 repository/entity 选择 JPA/JDBC 的最佳做法是什么?
PS:发现 @EnableJdbcRepositories
有 basePackages 属性,但我不确定这是个好主意
这几乎可以肯定是由于 Spring 数据 JDBC 旧版本中的一个修复错误。确保您至少拥有以下版本的 spring-data-jdbc
之一
1.0.12
1.1.1
2.0.0
详情见DATAJDBC-437。
我计划在一个应用程序(一些实体 JPA 和其他 JDBC)中使用 Spring Data JPA 和 JDBC 存储库 Spring 启动 2.1.7.
public interface UserRepository2 extends CrudRepository<User, Integer> {
}
@Entity
@Table(name = "userstab")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String email;
...
}
运行 应用程序我收到错误:
The bean 'userRepository2', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting **spring.main.allow-bean-definition-overriding=true**
Invalid bean definition with name 'userRepository2' defined in null: Cannot register bean definition [Root bean: class [org.springframework.data.**jpa**.repository.support.**JpaRepositoryFactoryBean**]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'userRepository2': There is already [Root bean: class [org.springframework.data.**jdbc**.repository.support.**JdbcRepositoryFactoryBean**];
我试过 Spring 没有 Spring 数据的引导测试应用程序 JDBC => 没问题
我用 spring.main.allow-bean-definition-overriding=true => 没问题
尝试了这个应用程序因此 Spring Data 从一个存储库接口 中创建了 2 个存储库 bean(JPA 和 JDBC),接口名称为 (userRepository2)。 我不能为这 2 个 repo bean 设置不同的名称,不能使用 spring.main.allow-bean-definition-overriding=true.
为每个 repository/entity 选择 JPA/JDBC 的最佳做法是什么?
PS:发现 @EnableJdbcRepositories
有 basePackages 属性,但我不确定这是个好主意
这几乎可以肯定是由于 Spring 数据 JDBC 旧版本中的一个修复错误。确保您至少拥有以下版本的 spring-data-jdbc
1.0.12 1.1.1 2.0.0
详情见DATAJDBC-437。