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);
添加回答
舉報