2009-10-30 35 views

Trả lời

14

Bạn cần phải viết correlated subquery. Giả sử tên thuộc tính/lớp khớp với tên cột/bảng ở trên:

DetachedCriteria subquery = DetachedCriteria.forClass(AETable.class, "b") 
.add(Property.forName("b.classpk").eqProperty("a.classpk")) 
.add(Property.forName("b.userid").eqProperty("a.userid")) 
.add(Property.forName("b.modifiedDate").gtProperty("a.modifiedDate")); 

Criteria criteria = session.createCriteria(AETable.class, "a") 
.add(Property.forName("userid").eq(new Integer(10146))) 
.add(Subqueries.notExists(subquery); 
6

Chỉ cần thêm một truy vấn trên. Nếu entryid không phải là khóa chính, thì bạn sẽ cần thêm phép chiếu.

 

DetachedCriteria subquery = DetachedCriteria.forClass(AETable.class, "b") 
.add(Property.forName("b.classpk").eqProperty("a.classpk")) 
.add(Property.forName("b.userid").eqProperty("a.userid")) 
.add(Property.forName("b.modifiedDate").gtProperty("a.modifiedDate")) 
.add(setProjection(Projections.property("entryId")); // Additional projection property 

Criteria criteria = session.createCriteria(AETable.class, "a") 
.add(Property.forName("userid").eq(new Integer(10146))) 
.add(Subqueries.notExists(subquery); 

 
+0

Tôi đã làm điều gì đó rất giống và cần chiếu. – jnrcorp

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