0
假設我有一個名爲MyData
且帶有主標識符字段(稱爲「primaryID」的BigDecimal
類型)的JPA註釋類,以及兩個稱爲「 fieldA「和」fieldB「。我想要做的是創建一個JPA查詢,將爲給定的MyData
實例選擇fieldA AND fieldB
。JPQL查詢:選擇一個布爾值,它是兩個對象字段的AND
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Boolean> boolQuery = builder.createQuery(Boolean.class);
final Root<MyData> data = boolQuery.from(MyData.class);
boolQuery.select(builder.isTrue(builder.and(data.<Boolean> get("fieldA"),
profile.<Boolean> get("fieldB"))));
final Predicate primaryIDPredicate = builder.equal(profile.<BigDecimal> get("primaryID"),
1000);
boolQuery.where(primaryIDPredicate);
final TypedQuery<Boolean> myQuery = entityManager.createQuery(boolQuery);
當我entityManager
執行此查詢,我得到:org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: and near line 1...
。這使我相信,我需要一些不同的方法(除了builder.isTrue
方法)來指定我想要取對象的布爾值和兩個字段。關於如何構建此查詢的任何想法?
爲什麼標題顯示「JPQL」,如果有問題,您說您需要構建JPA查詢? – jFrenetic
我明白「JPQL」是指「使用JPA查詢語言」。無論這意味着創建一個JPA字符串查詢(是否參數化),還是使用CriteriaBuilder/CriteriaQuery,我都不在乎。如果我使用的術語中存在錯誤,我會更新問題。 –
對不起,我自己犯了一個錯字。實際上有兩種在JPA中構建查詢的主要方法:1)** JPQL **。例如:'SELECT a,b FROM C' 2)類型安全的** Criteria查詢API **。你在你的例子中使用後者。 – jFrenetic