2016-09-05 43 views
0

有沒有一種方法來過濾從基類派生的類?派生類的java春天倉庫過濾器

例如我有Animal.class,我有AnimalRepository。 我想找到的類型派生類的動物,所以像:

Animal animalRepository.findByDerivedClass(Class clazz); 

同時我事先沒有哪個派生類是。它可以是貓,狗,或者我還不知道的新款。可能嗎?

回答

1

是,比如你可以通過類型類的創建與Hibernate一個選擇:

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(); 
}