代码之家  ›  专栏  ›  技术社区  ›  Denis Stephanov

在Spring数据存储库中更正继承

  •  0
  • Denis Stephanov  · 技术社区  · 6 年前

    我必须实现带有注释的自定义存储库类 @Repository 它应该继承另一个带有注释的类 @存储库 也。

    什么是该用例的正确实现?可以直接继承该类并添加 @储存库 总的来说,还是有另一个最佳实践?事实上,当我定义了

     @EnableJpaRepositories(basePackages = { "com.example.foo.repositories", "com.example.bar.repositories" }
    

    在里面 @Configuration 类在根目录下,它不扫描我的存储库,我不能自动连接它。

    以下是我的知识库类示例:

    父存储库(第三方类):

    @Repository
    public abstract class ParentRepository {
      // ...
    }
    

    包中的接口和IMPL类 com.example.foo.repositories :

    public interface IFooRepository {
       Foo getFoo();
    }
    
    @Repository
    public class FooRepository extends ParentRepository implements IFooRepository {
       Foo getFoo() {
          // ...
       }
    }
    

    您知道如何修复它并使其能够自动连接ifoorepository吗? 谢谢你的建议。

    编辑:

    我在@enablejparepositories旁边找到了green bean,当我单击bean时,它会将我重定向到bar存储库,并且不显示foorepository bean。我不理解,因为两个存储库都是相同的实现。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Oleksandr Papchenko    6 年前

    根据JPA存储库的文档

    在前面的示例中,Spring被指示扫描com.acme.repository及其所有子包以查找扩展存储库或其子接口之一的接口。对于找到的每个接口,基础结构注册特定于持久性技术的FactoryBean,以创建处理查询方法调用的适当代理。 see

    如此卑贱 @EnableJpaRepositories -与链接中的XML配置相同-它指示查找扩展 Repository .在你的例子中 @Repository 注释-指示Spring转换异常。你应该包括 "com.example.foo.repositories", "com.example.bar.repositories" 进入部件扫描。尝试 @ComponentScan 注释 see

        2
  •  0
  •   Adam Bates    6 年前

    添加 @Primary 默认情况下,自定义存储库的注释应该尽可能自动将其连接到另一个类中,即使对于autowire还有其他有效的bean。