nÁ¬½Ó£¨join£©
1£ºHibernate¿ÉÒÔÔÚÏà¹ØÁªµÄʵÌå¼äʹÓÃjoin£¬ÀàËÆÓÚsql£¬Ö§³Öinner join¡¢left outer join¡¢right outer join¡¢full join£¨È«Á¬½Ó£¬²¢²»³£Óã©¡£
2£ºinner join¿ÉÒÔ¼òд³Éjoin£¬left outer join ºÍright outer joinÔÚ¼òдµÄʱºò¿ÉÒÔ°ÑouterÈ¥µô¡£
with
ͨ¹ý HQL µÄ with ¹Ø¼ü×Ö£¬Äã¿ÉÒÔÌṩ¶îÍâµÄ join Ìõ¼þ¡£
È磺from Cat as cat left join cat.kittens as kitten with kitten.bodyWeight > 10.0
fetch
¿ÉÒÔÒªÇóÁ¢¼´·µ»Ø¹ØÁªµÄ¼¯ºÏ¶ÔÏó£¬È磺
java´úÂ룺
1. from Cat as cat
2. inner join fetch cat.mate
3. left join fetch cat.kittens
¶ÔÓÚûÓйØÁªµÄʵÌ壬ÈçºÎʹÓÃjoinÄØ£¿
¶ÔÓÚûÓйØÁªµÄʵÌ壬ÏëҪʹÓÃjoin£¬¿ÉÒÔ²ÉÓñ¾µØ²éѯµÄ·½Ê½£¬Ê¹ÓÃsqlÀ´ÊµÏÖ£¬±ÈÈ磺
s.createSQLQuery("select um.*,dm.* from tbl_user2 um left join tbl_dep dm on um.age=dm.uuid")
.addEntity("um",UserModel.class).addEntity("dm",DepModel.class);
1£ºÐÂÔö
2£ºload¡¢ get
3£ºÐÞ¸Ä
4£º°´Ìõ¼þ²éѯ
£¨1£©´«ÈëÌõ¼þÖµµÄ·½·¨£º£¿»ò :Ãû³Æ£¬Ë÷Òý´Ó0¿ªÊ¼
£¨2£©¸ø²ÎÊý¸³Öµ
£¨3£©·µ»Ø¶ÔÏó
£¨4£©·µ»Ø¶à¸öÊôÐÔ£¬ÐγÉObject[]
£¨5£©getByConditionµÄHibernate°æÊµÏÖ
5£ºÉ¾³ý
6£º·ÖÒ³
Query q = sess.createQuery("from DomesticCat cat");
q.setFirstResult(20);
q.setMaxResults(10);
List cats = q.list();
Ò²¿ÉÒÔʹÓÃÄãµÄÊý¾Ý¿âµÄNative SQLÓïÑÔÀ´²éѯÊý¾Ý¡£Õâ¶ÔÄãÔÚҪʹÓÃÊý¾Ý¿âµÄ
Ä³Ð©ÌØÐÔµÄʱºò(±ÈÈç˵ÔÚ²éѯÌáʾ»òÕßOracleÖÐµÄ CONNECT¹Ø¼ü×Ö)£¬ÕâÊǷdz£ÓÐ
Óõġ£Õâ¾ÍÄܹ»É¨ÇåÄã°ÑÔÀ´Ö±½ÓʹÓÃSQL/JDBC µÄ³ÌÐòÇ¨ÒÆµ½»ùÓÚ HibernateÓ¦ÓÃ
µÄµÀ·ÉϵÄÕϰ¡£
ʹÓÃSQLQuery
¶ÔÔÉúSQL²éѯִÐеĿØÖÆÊÇͨ¹ýSQLQuery½Ó¿Ú½øÐеģ¬Í¨¹ýÖ´ÐÐ
Session.createSQLQuery()»ñÈ¡Õâ¸ö½Ó¿Ú¡£ÏÂÃæÀ´ÃèÊöÈçºÎʹÓÃÕâ¸öAPI½øÐвéѯ¡£
±êÁ¿²éѯ£¨Scalar queries£©
s.createSQLQuery(¡°select uuid,name from tbl_user¡±).list();
Ëü½«·µ»ØÒ»¸öObject[]×é³ÉµÄList£¬Hibernate»áʹÓÃResultSetMetadataÀ´Åж¨·µ»ØµÄ±êÁ¿ÖµµÄʵ¼Ê˳ÐòºÍÀàÐÍ¡£ÄãÒ²¿ÉÒÔʹÓÃscalarÀ´Ã÷È·Ö¸Ã÷ÀàÐÍ£¬È磺
s.createSQLQuery("select * from tbl_user").addScalar("id", LongType. INSTANCE)
id×ֶξÍÃ÷È·ÊÇlongÐÍ£¬µ±È»ÄãÒ²¿ÉÒÔÖ¸¶¨ºÜ¶à¸ö×ֶεÄÀàÐÍ¡£
ʵÌå²éѯ(Entity queries)
ÉÏÃæµÄ²éѯ¶¼ÊÇ·µ»Ø±êÁ¿ÖµµÄ£¬Ò²¾ÍÊÇ´ÓresultsetÖзµ»ØµÄ¡°Â㡱Êý¾Ý¡£ÏÂÃæÕ¹Ê¾ÈçºÎͨ¹ýaddEntity()ÈÃÔÉú²éѯ·µ»ØÊµÌå¶ÔÏó¡£
(1) s.createSQLQuery("select * from tbl_user").addEntity(UserModel.class);
(2) s.createSQLQuery(¡°select uuid,userId from tbl_user2¡±).addEntity (UserModel.class); //Ò»¶¨Òª°Ñ±íµÄËùÓÐ×Ö¶ÎÂÞÁгöÀ´
(3) s.createSQLQuery("select {um}.uuid as {um.uuid},{um}.name as {um.name} from tbl_user {um}").addEntity("um",UserModel.class);
¹¦ÄܸúµÚ¶þ¸ö²î²»¶à£¬Ò²Òª°Ñ±íµÄËùÓÐ×ֶζ¼ÂÞÁгöÀ´
(4)¼òµ¥µãµÄд·¨£ºs.createSQLQuery("select * from tbl_user2 um")
.addEntity("um",UserModel.class);
(5)Ìí¼ÓÌõ¼þµÄʾÀý£º
s.createSQLQuery("select * from tbl_user where uuid= and name like ").addEntity(UserModel.class).setString(0, "3").setString(1,"%na%");
ÃüÃûSql²éѯ
¿ÉÒÔÔÚÓ³ÉäÎĵµÖж¨Òå²éѯµÄÃû×Ö,È»ºó¾Í¿ÉÒÔÏóµ÷ÓÃÒ»¸öÃüÃûµÄ HQL ²éѯһÑùÖ±½Óµ÷ÓÃÃüÃû SQL²éѯ.ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃDz» ÐèÒªµ÷Óà addEntity() ·½·¨¡£
ÔÚhbm.xmlÖÐÅäÖã¬Ê¾ÀýÈçÏ£º
java´úÂ룺
1.
2.
3. select um.name as {um.name},
4. um.age as {um.age},
5. um.uuid as {um.uuid}
6. from tbl_user um
7. where um.name like :name
8.
×¢Ò⣺ÒòΪҪ·µ»ØÒ»¸ö¶ÔÏó£¬ËùÒÔÒª°Ñ±íµÄËùÓÐ×ֶζ¼ÂÞÁÐÉÏ£¬·ñÔò»á±¨´í¡°ÁÐÃûÎÞЧ¡±£¬ÆäʵÊÇÔÚ·´ÉäÏò¶ÔÏó¸³ÖµµÄʱºò£¬´ÓsqlµÄ·µ»ØÖеò»µ½Õâ¸öÊý¾Ý¡£
³ÌÐòÀïÃæµ÷ÓÃʾÀý£ºQuery q = s.getNamedQuery(um.getClass().getName()
+".users").setString("name", "%n%");
ÃüÃûSql²éѯ--ʹÓÃreturn-property
ʹÓÃ
ÔÚhbm.xmlÖÐÅäÖã¬Ê¾ÀýÈçÏ£º
java´úÂ룺
1.
2.
3.
4.
5.
6.
7. select um.name as umName,
8. um.age as age,
9. um.uuid as uuid
10. from tbl_user um
11. where um.name like :name
12.
¾ßÓÐÒ»¸öÖ±¹ÛµÄ¡¢¿ÉÀ©Õ¹µÄÌõ¼þ²éѯAPIÊÇHibernateµÄÌØÉ«¡£
´´½¨Ò»¸öCriteria ʵÀý
org.hibernate.Criteria½Ó¿Ú±íÊ¾ÌØ¶¨³Ö¾ÃÀàµÄÒ»¸ö²éѯ¡£SessionÊÇ CriteriaʵÀýµÄ¹¤³§¡£
java´úÂ룺
²é¿´¸´ÖƵ½¼ôÌù°å´òÓ¡
1. Criteria crit = sess.createCriteria(Cat.class);
2. crit.setMaxResults(50);
3. List cats = crit.list();
ÏÞÖÆ½á¹û¼¯ÄÚÈÝ
Ò»¸öµ¥¶ÀµÄ²éѯÌõ¼þÊÇorg.hibernate.criterion.Criterion ½Ó¿ÚµÄÒ»¸öʵÀýorg.hibernate.criterion.RestrictionsÀà ¶¨ÒåÁË»ñµÃijЩÄÚÖÃCriterionÀàÐ͵Ť³§·½·¨¡£