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