【问题标题】:java spring repository filter by derived classjava spring存储库按派生类过滤
【发布时间】:2016-09-05 15:32:59
【问题描述】:

有没有办法按从基类派生的类进行过滤?

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

Animal animalRepository.findByDerivedClass(Class clazz);

同时我事先并不知道它是哪个派生类。它可以是猫、狗或我还不知道的新东西。有可能吗?

【问题讨论】:

    标签: java spring repository criteria-api


    【解决方案1】:

    是的,例如,您可以通过类的类型使用休眠创建一个选择:

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

    【讨论】:

    • 我希望通过存储库找到解决方案,但这看起来也很有希望,会尝试一下。
    【解决方案2】:

    接受的答案引导我使用标准(存储库不能这样做,所以必须为存储库编写自定义方法,这意味着使用标准)

    另请注意,如果在存储库中使用此方法,则必须根据 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2016-07-28
      • 2017-01-10
      • 2016-07-02
      相关资源
      最近更新 更多