【问题标题】:How to match a CriteriaBuilder Predicate with a given Entity?如何将 CriteriaBuilder 谓词与给定实体匹配?
【发布时间】:2016-01-18 16:05:30
【问题描述】:

在我的用例中,我有以下设置:合同有一个人和一个提供者相关联。因此,合同在persons 表和providers 表上有一个外键。所以在 CriteriaApi 中,我加入了 Contract 和 Person 和 Provider:

Root<Contract> contract = ...
Join <Contract, Person> person = contract.join(Person.class);
Join <Contract, Provider> provider = contract.join(Provider.class);

检查一个人的某些值的构建谓词效果很好,例如

cb.like(person.get(Person_.lastname), lastname);

对于提供者,情况有所不同,因为我已经有 ProviderEntity 可以加入。但是我没有找到以

的方式告诉 CriteriaApi 一些事情的方法
cb.is(provider.get(Provider_), provider);

如果我已经拥有包含主键的实体(而主键又没有映射到 Provider_ 中),那么根据某个字段搜索提供者似乎有点愚蠢。

由于我在 Spring Data 的上下文中工作,顺便说一下,我只能定义规范而不是完整的查询。 :-)

【问题讨论】:

    标签: criteria-api


    【解决方案1】:

    好吧,也许我应该删除这个问题,因为我意识到它是多么愚蠢。我将暂时离开它,以便有人可以从中学习:-)

    我可以像在 Root 上那样做,而不是在 Join 上构建谓词

    cb.equal(contract.get(Contract_.provider), provider);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多