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

时间:2018-12-14 14:03:25

标签: java spring spring-boot spring-data-jpa

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

该用例的正确实现是什么?是否可以直接继承该类并将@Repository添加到main中,或者还有另一种最佳实践?定义后,实际上我有问题

 @EnableJpaRepositories(basePackages = { "com.example.foo.repositories", "com.example.bar.repositories" }
@Configuration类中的

不会扫描我的存储库,也无法自动装配它。

这是我的存储库类的示例:

父存储库(第三方类):

@Repository
public abstract class ParentRepository {
  // ...
}
软件包com.example.foo.repositories中的

interface和impl类:

public interface IFooRepository {
   Foo getFoo();
}

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

您是否知道如何解决它并使自动连接IFooRepository成为可能? 谢谢你的建议。

编辑:

我在@EnableJpaRepositories旁边发现了一个绿色bean,当我单击该bean时,它将我重定向到bar存储库,并且没有显示FooRepository Bean。我不明白,因为两个存储库都实现相同。

2 个答案:

答案 0 :(得分:1)

根据jpa信息库的文档

  

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

因此,基本上@EnableJpaRepositories-与链接中的xml配置相同-它指示查找扩展Repository的类。在您的示例中,您有@Repository注释-指示Spring转换异常。您应该将"com.example.foo.repositories", "com.example.bar.repositories"加入组件扫描。尝试使用@ComponentScan注解see

答案 1 :(得分:0)

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