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

SpringDataCommonsのRepositoriesヘルパークラスを確認することをお勧めします。からリポジトリを作成しListableBeanFactory、管理対象ドメインタイプごとにリポジトリにアクセスできます。

于 2013-03-03T12:19:04.667 に答える
0

createBean を getBean に置き換えたところ、機能しました。

于 2013-03-01T05:01:45.950 に答える