2014-11-05 2 views
0

나는 이것과 비슷한 sql Query를 가지고있다.Hibernate에서 Having 및 By 절을 어떻게 사용합니까?

SELECT VERSION_ID FROM VIEWTEST 
where (item_id='I001' and value ='V001') 
or (item_id='I002' and value ='V002') 
or (item_id= 'I003'and value ='V003') 
group by VERSION_ID 
having count(1) = 3 

내 ViewTest 엔티티는 이와 유사합니다.

@Column(name = "version_id") 
    private String versionId; 

@Column(name = "item_id") 
    private String itemId; 

@Column(name = "value") 
    private String value; 

다음은 나에게 작성된 Crieteria Query입니다.

CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder(); 
     CriteriaQuery<String> query = criteriaBuilder.createQuery(String.class); 
     Root<ViewTest> testRoot = query.from(ViewTest.class); 
     List<Predicate> predicates = new ArrayList<Predicate>(); 
     Predicate p1 = criteriaBuilder.equal(testRoot.get("itemId"), "I001"); 
     Predicate p2 = criteriaBuilder.equal(testRoot.get("itemId"), "I002"); 
     Predicate p3 = criteriaBuilder.equal(testRoot.get("itemId"), "I003"); 

     Predicate v1 = criteriaBuilder.equal(testRoot.get("value"), "V001"); 
     Predicate v2 = criteriaBuilder.equal(testRoot.get("value"), "V002"); 
     Predicate v3 = criteriaBuilder.equal(testRoot.get("value"), "V003"); 
     predicates.add(criteriaBuilder.and(p1 , v1)); 
     predicates.add(criteriaBuilder.and(p2 , v2)); 
     predicates.add(criteriaBuilder.and(p3 , v3)); 

이제 그룹 기준을 추가하고 절을이 기준에 추가하는 방법을 알지 못합니다.

누군가 나를 도울 수 있습니까?

더 좋은 방법이 있습니다.

방금 ​​내 코드에 아래에 추가되었습니다.

query.groupBy(testRoot.<String> get("versionId")); 
query.having(criteriaBuilder.in(criteriaBuilder.count(testRoot.get("versionId"))).value(
     queryCount)); 

이것은 트릭을 만들었습니다.

답변

0

예상치를 보았습니까? Hibernate developer guide: Projections

예 :

List results = session.createCriteria(Cat.class) 
.setProjection(Projections.projectionList() 
    .add(Projections.rowCount()) 
    .add(Projections.avg("weight")) 
    .add(Projections.max("weight")) 
    .add(Projections.groupProperty("color")) 
) 
.list();