我正在尝试在我的数据库应用程序中进行“按类型查找”研究。 特别是,我有一个类型的层次结构:母亲< - Child1,Child2。 我有3个相应的存储库,即注释@Repository和扩展PagingAndSortingRepository的类。
现在,我有一个控制器需要在数据库中加载Child1(或Child2)类型的所有实例。
这是我对ControllerClassForTheSearch类中方法的建议:
public List<? extends Mother> findMotherByType(Class classToSearch)
throws FindException {
PagingAndSortingRepository<? extends Mother, Long> repo;
try {
repo = beanFactory.createBean(classToSearch);
} catch (Exception e) {
throw new FindException (this
.getClass().getName(), classRepository);
}
return repo.findAll();
}
beanFactory变量在同一个类中定义如下:
@Controller
public class ControllerClassForTheSearch implements BeanFactoryAware {
private AutowireCapableBeanFactory beanFactory;
@Override
public void setBeanFactory(final BeanFactory beanFactory)
throws BeansException {
this.beanFactory = (AutowireCapableBeanFactory) beanFactory;
}
[...] // rest of the class code
然而,它不起作用:我的存储库是接口,因此无法创建它们(这是我得到的错误)。 在其他类中,存储库是自动装配的变量,它们工作正常,包括Mother,Child1和Child2。
您对我如何找到Child1类型的结果有什么想法吗?
答案 0 :(得分:1)
您可能想看一下Spring Data Commons中的Repositories
帮助器类。您可以从ListableBeanFactory
创建一个,然后按托管域类型访问存储库。
答案 1 :(得分:0)
我用getBean替换了createBean,它可以工作。