Criteria API - 表达式<list <t>的IN子句&gt;

时间:2016-01-12 15:34:33

标签: java hibernate jpa

我的potentialDonorFile有一个elementCollection causeOfDeath,我想过滤它们。

所以我有一个屏幕,它给了我一个causeOfDeath,我想要检索包含我搜索过的causeOfDeath的所有PotentialDonorFiles。

我无法真正开始工作..到目前为止我已尝试过:

ListView

但是当我这样做时,我总是得到:

Expression<List<CauseOfDeath>> listExpression = potentialDonorFileRoot.get(PotentialDonorFile_.causesOfDeath);
filterCondition = getInPredicateForStringExpression(searchCriteria.getCauseOfDeath(), cb, listExpression, filterCondition);


public <T extends Enum> Predicate getInPredicateForStringExpression(String filterValue, CriteriaBuilder cb, Expression<List<T>> expressions, Predicate filterCondition) {
     return cb.and(filterCondition, expressions.in(filterValue));
}

&#39; UNDER_MAXIMUM_THERAPY&#39;是某种死亡原因(我的过滤价值)。

问题实际上是,如何使用条件api编写以下SQL:

Caused by: java.lang.IllegalArgumentException: Parameter value [UNDER_MAXIMUM_THERAPY] did not match expected type [java.util.Collection]

PotentialDonorFile中的CauseOfDeath声明(它是一个枚举):

select * from POTENTIAL_DONOR_FILE pdf, CAUSES_OF_DEATH cod
where cod.PDF_ID = pdf.ID AND  cod.CAUSE_OF_DEATH = 'UNDER_MAXIMUM_THERAPY';

我尝试过使用SubQuery,但后来发现它无法使用,因为CauseOfDeath不是实体。

0 个答案:

没有答案