2012-09-14 47 views
10

Tôi cố gắng để viết một tiêu chí truy vấn riêng biệt, sử dụng:Tiêu chuẩn JPA truy vấn riêng biệt

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); 

Dựa trên ví dụ trong javadoc cho CriteriaQuery.select()

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

Tuy nhiên, điều này mang lại cho tôi một lỗi:

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

Ai đó có thể vui lòng chỉ ra những gì tôi đang làm sai? Hoặc làm thế nào để có được một đối tượng Selection từ một Path?

Trả lời

38

Tôi hiểu rồi. Vấn đề là CriteraQuery của tôi cần phải có kiểu String. Công trình này:

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); 
Các vấn đề liên quan