java spring repository按派生类过滤

时间:2016-09-05 15:32:59

标签: java spring repository criteria-api

有没有办法按类派生自基类?

例如我有Animal.class,我有AnimalRepository。 我希望按派生类的类型找到动物,如下所示:

Animal animalRepository.findByDerivedClass(Class clazz);

与此同时,我没有事先提到它的派生类。它可能是猫,狗或新的我还不知道。有可能吗?

2 个答案:

答案 0 :(得分:1)

是的,例如,您可以按类的类型创建一个具有休眠的选择:

= render "addform/_form.html.erb"

答案 1 :(得分: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();
}