JPA(eclipselink)の基準apiを使用して次の文を作成しようとしていますが、一部のカテゴリにユーザーが存在するかどうか尋ねるのは簡単ですjpa基準では、 "少なくとも1行が真を返す場合"
は、文は私がしたい:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Boolean> criteriaQuery = criteriaBuilder.createQuery(Boolean.class);
Root<T> root = criteriaQuery.from(tclass);
Subquery<T> subquery = criteriaQuery.subquery(tclass);
Root<T> subroot = subquery.from(tclass);
subquery.select(subroot);
Predicate subPredicate = criteriaBuilder.equal(subroot.get("category"),category);
subquery.where(subPredicate);
Predicate predicateExists = criteriaBuilder.exists(subquery);
Case<Boolean> booleancase = criteriaBuilder.<Boolean>selectCase();
Expression<Boolean> booleanExpression =
booleancase.when(predicateExists,true)
.otherwise(false);
criteriaQuery.select(booleanExpression);
TypedQuery<Boolean> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.getResultList();
悲しいことに、私が持っている文は、私は「利用者からの」最後を消去し、フォローしたいされています:私はこのコードを使用しようとして
SELECT
CASE
WHEN EXISTS
(SELECT * FROM user WHERE category = ?)
THEN true
ELSE false
END
bind => [10]
SELECT
CASE
WHEN EXISTS
(SELECT ? FROM user t1 WHERE (t1.category = ?))
THEN ?
ELSE ?
END
FROM user t0
bind => [1, 110, true, false]
? – perissf
申し訳ありませんが、それは副主義のサブルーチンでした。私はstackoverflowで間違って書く(私はすでに質問を修正する)。ありがとう、しかしそれは私の問題を解決しません:P – Troncador
あなたは、単純で明確なSQLクエリを持っている場合、なぜこの複雑で読めないJavaコードが必要ですか? – jbaliuka