2

我正在尝试对我的数据库应用程序进行“按类型查找”研究。特别是,我有一个类型的层次结构:Mother <-- 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 类型的类的结果吗?

4

2 回答 2

1

您可能想看看RepositoriesSpring Data Commons 中的帮助程序类。您可以从 a 创建一个ListableBeanFactory,然后按托管域类型访问存储库。

于 2013-03-03T12:19:04.667 回答
0

我用 getBean 替换了 createBean 并且它有效。

于 2013-03-01T05:01:45.950 回答