2010-06-04 33 views
5

tôi có hai thực thể có tên ChánhChild, được liên kết trong một mối quan hệ one-to-many. Thực thể con có thuộc tính boolean isStudent.Hibernate Tiêu chuẩn và số lượng hàng hạn chế

Làm cách nào để nhận được, sử dụng API tiêu chí Hibernate, tất cả các thực thể cha mẹ có ít nhất một con với isStudent = true?

Tôi đã cố gắng sử dụng đối tượng Chiếu để đếm tất cả các bậc cha mẹ có ít nhất một Trẻ em với thuộc tính được đặt chính xác và sau đó trả lại số có số hàng lớn hơn 0, như trong đoạn mã sau không làm việc, mặc dù):

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

Nhờ sự giúp đỡ của bạn

Trả lời

9

này đã làm việc cho tôi:

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

[Edit: Cố định một lỗi một chỉ ra bởi @brabene tz]

Trường hợp có mối quan hệ hai chiều giữa Cha mẹ và Trẻ em, nghĩa là Trẻ có trường "cha mẹ" Nó trả về Cha mẹ có> 0 trẻ em.

1

Câu trả lời từ RobAu gần như những gì chúng tôi cần. Nhưng có một lỗi nhỏ trong đó: Thay vì Truy vấn con. gt (..) bạn cần truy vấn con. lt (...)

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

cảm thấy ngược lại nhưng nó hoạt động! –

Các vấn đề liên quan