2 回答
TA贡献1830条经验 获得超3个赞
我还没有找到解决问题的方法,我的决定是在没有规范的情况下使用实体管理器“手动创建”查询。
final String queryString = "select distinct pos from Position pos " +
"inner join pos.managersPositions mn " +
"where mn.managerId = :managerId and mn.isDirect = :isDirect ";
TypedQuery<Position> query = entityManager.createQuery(
queryString,
Position.class);
query.setParameter("managerId", managerEmployeeId);
query.setParameter("isDirect", true);
因为当我制作它时criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));,它只制作了一个带有一个参数的谓词。
还尝试将规格分为 2,结果不成功:
Specification.where(firstSpecification).and(secondSpecification)
TA贡献1829条经验 获得超7个赞
使用 CriteriaBuilder.parameter() 添加多个参数:
ParameterExpression<Integer> managerIdParam =
criteriaBuilder.parameter( Integer.class );
ParameterExpression<Boolean> isDirectParam =
criteriaBuilder.parameter( Boolean.class );
Predicate managerPredicate =
criteriaBuilder.equal(managersPositionsJoin.get("managerId"),
managerIdParam);
Predicate equalsDirect =
criteriaBuilder.equal(managersPositionsJoin.get("isDirect"), isDirectParam);
添加回答
举报