</p> 下面是几个查询限制的例子:
/ [( ~+ i' `4 z9 A. l: o5 ] 查询学生名字以t开关的所有Student对象
! @1 V2 R( L) z" S( ` Criteria criertia = session.createCriteria(Student.class);- t1 u6 b' {5 e/ ]- {: i3 m
criteria.add(Restrictions.like("name", "t%"));
" c- D0 L. M0 G List list = criteria.list();2 D% O+ Q9 v+ E. N
Student stu = (Student)list.get(0);
6 M' Q% n4 a a0 l8 e7 Q8 e 或者:
: ]" |7 P7 A0 z" y7 ^. Y# V Criteria criertia = session.createCriteria(Student.class);
( S' x3 f2 E# x1 q5 f, ^; e criteria.add(Restrictions.like("name", "t",MatchMode.START));" P7 w7 u8 q: c+ B- t4 w/ A
List list = criteria.list();% ^6 c9 C6 y7 {6 r. _3 [
Student stu = (Student)list.get(0);9 m2 [& u' `# i/ E; i
查询学生姓名在Bill,Jack和Tom之间所有的Student对象0 E9 i+ m+ }1 W' } O4 ^" m2 S
String[] names = {"Bill","Jack","Tom"};
2 x) J2 r9 R. D5 \9 Y- f# ^ Criteria criertia = session.createCriteria(Student.class);
h2 v+ P1 v% }7 C, p% n1 Q criteria.add(Restrictions.in("name", names));1 C: k: [# [' B$ E2 m t
List list = criteria.list();
5 ^* J% L1 n/ l7 e# s! S Student stu = (Student)list.get(0);5 r8 d; ]) c. i2 S
查询学生年龄(age)等于22或为空(null)的所有学生对象
& a5 O3 g* f+ L: @9 O8 O Criteria criertia = session.createCriteria(Student.class);9 d" J7 s% O' M( R J* I1 d
criteria.add(Restrictions.eq("age", new Integer(22)));3 ?! X. X% ?$ c* D: N6 S
criteria.add(Restrictions.isNull("age"));/ A$ J }5 V0 _' [& t" c
List list = criteria.list();
( j# S- ?9 [; n- n Student stu = (Student)list.get(0);7 Y7 `) `. D/ `- x4 {: l- f
查询学生姓名以字母F开头的所有Student对象,并按姓名升序排序
( K) R( B% U" Q9 B! n Criteria criertia = session.createCriteria(Student.class);
) N( V1 y; B4 H# \( S& L criteria.add(Restrictions.like("name", "F%"));3 Q' I1 l7 m7 f6 q; C) M
criteria.addOrder(Order.asc("name"));
6 K. O8 [5 e T- p6 g7 h List list = criteria.list();
& F6 Z* I L& Y Student stu = (Student)list.get(0);( b) q6 s& T/ L8 [
注意调用Order.asc的方法应该是Criteria.addOrder()方法。% F B0 f, c( q* Z$ f
连接限制2 V% `9 z* O1 d. P- y
Criteria查询中使用FetchMode来实现连接限制。在HQL语句中,可以通过fetch关键字来表示预先抓取(Eager fetching),如下:
; G. A- P/ J# x# E& J5 E" w from Group g1 q1 ?$ m' g9 a9 {; v3 s
left join fetch g.students s
, V- h% E1 h9 {+ T3 ?! N where g.name like '%2005'8 `3 ^( C7 R$ u! P q* H
可以使用Criteria的API完成同样的功能,如下:
, N4 ~$ y/ J8 @3 z. f( h Criteria criertia = session.createCriteria(Group.class);8 Z3 H* M" t( K; h
criteria.setFetchMode("students", FetchMode.EAGER);
# P' g) w$ p3 d1 K, Z& p; k( X criteria.add(Restrictions.like("name", "2005",MatchMode.END));& W0 C/ c4 c1 H" B8 w
List list = criteria.list(); |