如何将 CriteriaBuilder 谓词与给定实体匹配?

How to match a CriteriaBuilder Predicate with a given Entity?

在我的用例中,我有以下设置:合同有一个人和一个相关联的提供者。因此,合同在人员 table 和提供者 table 上有一个外键。所以在 CriteriaApi 中,我加入了 Contract and 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 数据的上下文中工作,顺便说一下,我只能定义规范而不是完整的查询。 :-)

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

我可以像

那样在根上构建谓词,而不是在连接上构建谓词
cb.equal(contract.get(Contract_.provider), provider);