2010-06-04 4 views
5

일대 관계로 연결된 및 어린이부모라는 두 개의 엔티티를 갖는다. 하위 엔티티는 부울 isStudent 속성을가집니다.절전 기준 및 로우 카운트 제한

Hibernate Criteria API를 사용하여 적어도 하나의 하위가 isStudent = true 인 모든 부모 엔티티를 얻으려면 어떻게해야합니까?

Projection 개체를 사용하여 속성이 올바르게 설정된 자식이 하나 이상있는 부모를 모두 계산하려고했는데 다음 코드에서와 같이 행 수가 0보다 큰 노드를 반환합니다.)하지만, 작동하지 않습니다

Criteria criteria = getCurrentSession().createCriteria(Parent.class); 

criteria.setProjection(Projections.alias(Projections.rowCount(), "count")) 
.add(Restrictions.gt("count", 0)).createCriteria("children") 
.add(Restrictions.eq("isStudent", true)); 

감사를 도와

답변

9

를 이것은 나를 위해 일한 :

DetachedCriteria crit   = DetachedCriteria.forClass(Parent.class, "theparent"); 
DetachedCriteria countSubquery = DetachedCriteria.forClass(Child.class , "child" ); 

countSubquery 
    .add(Property.forName("theparent.id").eqProperty("parent.id")) 
    .setProjection(Projections.count("id")); 

crit.add(Subqueries.lt(Long.valueOf(0), countSubquery)); 

[편집 : 버그가 @brabene 지적 고정 tz]

부모와 자식 사이에 양방향 관계가있는 경우, 즉 하위 필드가 "부모"인 경우 부모가 0보다 큰 부모를 반환합니다.

1

RobAu의 답변은 우리가 필요로하는 것과 거의 같습니다. 하지만 작은 버그가 있습니다 : Subqueries 대신. gt (..) 하위 쿼리가 필요합니다. lt (...)

crit.add(Subqueries.lt(Long.valueOf(0), countSubquery)); 
+0

역으로 느껴지지만 작동합니다! –

관련 문제