gpt4 book ai didi

java - 扩展 SimpleJpaRepository

转载 作者:搜寻专家 更新时间:2023-11-01 03:17:15 24 4
gpt4 key购买 nike

我正在使用 Spring Boot,当我想像这个接口(interface)一样扩展 SimpleJpaRepository 时:

public interface BaseRepository<T, ID extends Serializable> extends JpaRepository<T, ID>{}

和这个实现:

public class BaseRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements BaseRepository<T, ID>
{
private final EntityManager entityManager;

public BaseRepositoryImpl(Class<T> domainClass, EntityManager entityManager)
{
super(domainClass, entityManager);
this.entityManager = entityManager;
}
}

我收到以下错误:

Could not autowire. No beans of 'Class<T>' type found.

我该如何解决?

最佳答案

当尝试通过扩展 SimpleJpaRepository 实现 JpaRepository 时,重要的是 spring 知道您正在这样做。默认情况下,spring 将尝试创建一个 SimpleJpaRepository,即使您扩展它也是如此。因此,您的 SimpleJpaRepository 的新实现将不会被填充、创建甚至远程可用。因此,所有扩展您的新自定义存储库的存储库都也不会创建

要解决这个问题,应该添加一些存储库配置。更具体地说,您需要在 @EnableJpaRepositories 注释中提供一个 repositoryBaseClass;例如

@Configuration
@EnableJpaRepositories(
repositoryBaseClass = RepositoryImpl.class
)

通常您已经有一些配置类来提供您的DataSource-bean、EntityManager-bean 和/或JpaTransactionManager-bean。作为一般的最佳实践,我建议将其放置在那里。

有时当您这样做时 spring 会有点困惑,并且仍然无法找到您新定义的 repositoryBaseClass。在这种情况下,请稍微帮助一下 spring 存储库 Autowiring 器,并提供一个基础包,例如

@Configuration
@EnableJpaRepositories(
repositoryBaseClass = RepositoryImpl.class,
basePackages = {
"be.your.company.your.path.to.your.repositories"
}
)

关于java - 扩展 SimpleJpaRepository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45403857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com