2016-09-05 13 views
0

ベースクラスから派生したクラスでフィルタリングする方法はありますか?派生クラスによるjava springリポジトリフィルタ

たとえば、私にはAnimal.classがあり、AnimalRepositoryがあります。 私は、派生クラスの種類によって動物を見つけたい、そうのようなもの:それは、クラスを派生し、私は事前にしないでください。同時に

Animal animalRepository.findByDerivedClass(Class clazz); 

。それは猫、犬、または私がまだ知らない新しいことができます。出来ますか?

答えて

1
はい、たとえばあなたがクラスの種類によって休止状態と選択を作成することができ

List<Animal> animal = (List<Animal>) getSession().createCriteria(Class clazz).list(); 
+0

私はリポジトリを使用したソリューションを望んでいましたが、これも有望ですが、試してみましょう。 – Sarief

0

受け入れ答えは、リポジトリが行うことはできません(使用基準に私を加鉛、そのリポジトリ用のカスタムメソッドを記述する必要がありましたこれは、基準の使用を意味します)

また、このメソッドをリポジトリで使用する場合、jpaの規約に従って宣言する必要があります。

public <T extends Animal> List<T> findByDerivedClass(Class<T> clazz) { 
    CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<T> cq = cb.createQuery(clazz); 
    Root<T> root = cq.from(clazz); // we pass clazz here again, because magic... 
    cq.select(root); 
    return entityManager.createQuery(cq).getResultList(); 
} 
関連する問題