有沒有一種方法來過濾從基類派生的類?派生類的java春天倉庫過濾器
例如我有Animal.class,我有AnimalRepository。 我想找到的類型派生類的動物,所以像:
Animal animalRepository.findByDerivedClass(Class clazz);
同時我事先沒有哪個派生類是。它可以是貓,狗,或者我還不知道的新款。可能嗎?
有沒有一種方法來過濾從基類派生的類?派生類的java春天倉庫過濾器
例如我有Animal.class,我有AnimalRepository。 我想找到的類型派生類的動物,所以像:
Animal animalRepository.findByDerivedClass(Class clazz);
同時我事先沒有哪個派生類是。它可以是貓,狗,或者我還不知道的新款。可能嗎?
是,比如你可以通過類型類的創建與Hibernate一個選擇:
List<Animal> animal = (List<Animal>) getSession().createCriteria(Class clazz).list();
接受的答案含鉛我的標準使用(庫做不到,所以只好寫庫自定義的方法,這意味着使用標準)
另請注意,如果在存儲庫中使用此方法,則必須根據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();
}
我一直希望有解決方案,但這也看起來很有希望,會嘗試一下。 – Sarief