28

以下を使用して、個別の基準クエリを作成しようとしています。

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<RuleVar> query = builder.createQuery(RuleVar.class);
Root<RuleVar> ruleVariableRoot = query.from(RuleVar.class);
query.select(ruleVariableRoot.get("foo").<String>get("foo")).distinct(true);

CriteriaQuery.select() の javadoc の例に基づく

CriteriaQuery<String> q = cb.createQuery(String.class);
 Root<Order> order = q.from(Order.class);
 q.select(order.get("shippingAddress").<String>get("state"));

ただし、これによりエラーが発生します。

The method select(Selection<? extends RuleVar>) in the type CriteriaQuery<RuleVar> is not applicable for the arguments (Path<String>)

誰かが私が間違っていることを指摘できますか? または、Path から Selection オブジェクトを取得する方法は?

4

1 に答える 1

70

わかった。問題は、CriteraQuery が String 型である必要があることでした。これは機能します:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<String> query = builder.createQuery(String.class);
Root<RuleVar> ruleVariableRoot = query.from(RuleVar.class);
query.select(ruleVariableRoot.get(RuleVar_.varType)).distinct(true);
于 2012-09-14T17:23:07.593 に答える