2010-11-17 30 views
6

tôi không thể tìm ra cách để tạo một truy vấn như thế này với Tiêu chuẩn Hibernate synthaxHibernate Tiêu chuẩn Query - điều kiện lồng nhau

select * from x where x.a = 'abc' and (x.b = 'def' or x.b = 'ghi') 

Bạn có một ý tưởng về làm thế nào để làm điều đó?
Tôi đang sử dụng phương pháp tĩnh Hibernate Restriction nhưng tôi không hiểu cách xác định lồng nhau 'hoặc' điều kiện

Trả lời

13

Bạn truy vấn cụ thể là:

crit.add(Restrictions.eq("a", "abc")); 
crit.add(Restrictions.in("b", new String[] { "def", "ghi" }); 

Nếu bạn đang băn khoăn về AND và ORS nói chung, thực hiện điều này:

// Use disjunction() or conjunction() if you need more than 2 expressions 
Disjunction aOrBOrC = Restrictions.disjunction(); // A or B or C 
aOrBOrC.add(Restrictions.eq("b", "a")); 
aOrBOrC.add(Restrictions.eq("b", "b")); 
aOrBOrC.add(Restrictions.eq("b", "c")); 

// Use Restrictions.and()/or() if you only have 2 expressions 
crit.add(Restrictions.and(Restrictions.eq("a", "abc"), aOrBOrC)); 

này sẽ tương đương với:

where x.a = 'abc' and (x.b = 'a' or x.b = 'b' or x.b = 'c') 
+0

cảm ơn rất hữu ích – mickthompson

1

Sử dụng cú pháp giống như (x.b IN ('def', 'ghi')).

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