java spring 存储库筛选派生 class

java spring repository filter by derived class

有没有一种方法可以通过从基数 class 派生的 class 进行过滤?

例如我有 Animal.class,我有 AnimalRepository。 我想按派生类型 class 查找动物,例如:

Animal animalRepository.findByDerivedClass(Class clazz);

同时我也没有提前推导出class是哪个。它可以是 Cat、Dog 或我还不知道的新的。可能吗?

是的,例如,您可以创建 select 休眠类型 class:

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