Bonjour,
J'essaie désespérément de mettre un selectCase dans une clause Where.
Je parviens a faire ce que je souhaite en SQL, me je n'y parviens pas avec l'Api Criteria.

Ce que je souhaite faire (SQL):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
where
prerequis3_.rank_ID=2
and case when aptitudest5_.state=true 
then (
            aptitudest5_.aptitude_ID in (3 , 4 , 1 , 6 , 2 , 8 , 7)
        ) 
else (
            aptitudest5_.aptitude_ID not in  (3 , 4 , 1 , 6 , 2 , 8 , 7)
        ) 
end
Ce que j'essaie avec l'API
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Predicate prank = cb.equal(prerequis.get("rank"), u.getRank());
In<Long> inClause = cb.in(astate.get("aptitude").get("id"));		
for (Aptitude a : u.getV().getAptitudes()) {
	inClause.value(a.getId());
}
SimpleCase<Boolean, Boolean> caseExpression = cb.selectCase(astate.get("state"));
	caseExpression.when( true,cb.isTrue(inClause));
	caseExpression .otherwise(cb.isTrue(inClause.not()));
Predicate finalPr = cb.and(prank, caseExpression);		
 
cq.where(finalPr);
qui me donne cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
19:04:19.242 [http-nio-8080-exec-132] ERROR org.hibernate.hql.internal.ast.ErrorTracker - line 1:391: unexpected token: in
19:04:19.242 [http-nio-8080-exec-132] ERROR org.hibernate.hql.internal.ast.ErrorTracker - line 1:391: unexpected token: in
antlr.NoViableAltException: unexpected token: in
J'ai bien l'impression que je ne peux pas utiliser de In<E> dans le selectCase(). Mais j'avoue ne pas avoir trouvé d'explication.

Quelqu'un a t'il une idée?