Hibernate4ʵս Ö® µÚÈý²¿·Ö£ºHibernateµÄ»ù±¾¿ª·¢(Ò»)

2014-11-24 08:26:59 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 4
1£ºË²Ê±(Transient) - ÓÉnew²Ù×÷·û´´½¨£¬ÇÒÉÐδÓëHibernate Session ¹ØÁªµÄ¶ÔÏó±»È϶¨ÎªË²Ê±µÄ¡£Ë²Ê±¶ÔÏ󲻻ᱻ³Ö¾Ã»¯µ½Êý¾Ý¿âÖУ¬Ò²²»»á±»¸³Óè³Ö¾Ã»¯±êʶ(identifier)¡£ Èç¹û˲ʱ¶ÔÏóÔÚ³ÌÐòÖÐûÓб»ÒýÓã¬Ëü»á±»À¬»ø»ØÊÕÆ÷Ïú»Ù¡£ ʹÓÃHibernate Session¿ÉÒÔ½«Æä±äΪ³Ö¾Ã״̬£¬Hibernate»á×Ô¶¯Ö´ÐбØÒªµÄSQLÓï¾ä¡£

2£º³Ö¾Ã(Persistent) - ³Ö¾ÃµÄʵÀýÔÚÊý¾Ý¿âÖÐÓжÔÓ¦µÄ¼Ç¼£¬²¢ÓµÓÐÒ»¸ö³Ö¾Ã»¯±êʶ¡£ ³Ö¾ÃµÄʵÀý¿ÉÄÜÊǸձ»±£´æµÄ£¬»ò¸Õ±»¼ÓÔØµÄ£¬ÎÞÂÛÄÄÒ»ÖÖ£¬°´¶¨Ò壬Ëü´æÔÚÓÚÏà¹ØÁªµÄSession×÷Ó÷¶Î§ÄÚ¡£ Hibernate»á¼ì²âµ½´¦ÓÚ³Ö¾Ã״̬µÄ¶ÔÏóµÄÈκθ͝£¬ÔÚµ±Ç°²Ù×÷µ¥ÔªÖ´ÐÐÍê±Ïʱ½«¶ÔÏóÊý¾ÝÓëÊý¾Ý¿âͬ²½¡£¿ª·¢Õß²»ÐèÒªÊÖ¶¯Ö´ÐÐUPDATE¡£½«¶ÔÏó´Ó³Ö¾Ã״̬±ä³É˲ʱ״̬ͬÑùÒ²²»ÐèÒªÊÖ¶¯Ö´ÐÐDELETEÓï¾ä¡£

3£ºÍѹÜ(Detached) - Óë³Ö¾Ã¶ÔÏó¹ØÁªµÄSession±»¹Ø±Õºó£¬¶ÔÏó¾Í±äΪÍѹܵġ£ ¶ÔÍѹܶÔÏóµÄÒýÓÃÒÀÈ»ÓÐЧ£¬¶ÔÏó¿É¼ÌÐø±»Ð޸ġ£ÍѹܶÔÏóÈç¹ûÖØÐ¹ØÁªµ½Ä³¸öеÄSessionÉÏ£¬ »áÔÙ´Îת±äΪ³Ö¾ÃµÄ£¬ÔÚÍÑ¹ÜÆÚ¼äµÄ¸Ä¶¯½«±»³Ö¾Ã»¯µ½Êý¾Ý¿â¡£

ͨ¹ý Session ½Ó¿ÚÀ´²Ù×÷ Hibernate
ÐÂÔö ¡ª¡ªsave ·½·¨¡¢ persist ·½·¨
1£ºpersist() ʹһ¸öÁÙʱʵÀý³Ö¾Ã»¯¡£È»¶ø£¬Ëü²»±£Ö¤Á¢¼´°Ñ±êʶ·ûÖµ·ÖÅ䏸³Ö¾ÃÐÔʵÀý£¬Õâ»á·¢ÉúÔÚflushµÄʱºò¡£persist() Ò²±£Ö¤ËüÔÚÊÂÎñ±ß½çÍâµ÷ÓÃʱ²»»áÖ´ÐÐINSERT Óï¾ä¡£Õâ¶ÔÓÚ³¤ÆÚÔËÐеĴøÓÐÀ©Õ¹»á»°/³Ö¾Ã»¯ÉÏÏÂÎĵĻỰÊǺÜÓÐÓõġ£
2£ºsave() ±£Ö¤·µ»ØÒ»¸ö±êʶ·û¡£Èç¹ûÐèÒªÔËÐÐINSERT À´»ñÈ¡±êʶ·û£¨Èç"identity" ¶ø·Ç"sequence" Éú³ÉÆ÷£©£¬Õâ¸öINSERT ½«Á¢¼´Ö´ÐУ¬²»¹ÜÄãÊÇ·ñÔÚÊÂÎñÄÚ²¿»¹ÊÇÍⲿ¡£Õâ¶ÔÓÚ³¤ÆÚÔËÐеĴøÓÐÀ©Õ¹»á»°/³Ö¾Ã»¯ÉÏÏÂÎĵĻỰÀ´Ëµ»á³öÏÖÎÊÌâ¡£

ɾ³ý ¡ª¡ªdelete ·½·¨
ÐÞ¸Ä ¡ª¡ª ÓÐËÄÖÖ·½·¨À´×ö£¬·Ö±ðÊÇ£º
1£ºÖ±½ÓÔÚSession´ò¿ªµÄʱºòload¶ÔÏó£¬È»ºóÐÞ¸ÄÕâ¸ö³Ö¾Ã¶ÔÏó£¬ÔÚÊÂÎñÌá½»µÄʱºò£¬»á×Ô¶¯flushµ½Êý¾Ý¿âÖС£
2£ºÐÞ¸ÄÍйܶÔÏ󣬿ÉÓÃupdate»òmerge·½·¨
3£º×Ô¶¯×´Ì¬¼ì²â£ºsaveOrUpdate·½·¨
update ºÍ merge ·½·¨
1£ºÈç¹ûÊý¾Ý¿âÀïÃæ´æÔÚÄãÒªÐ޸ĵļǼ£¬updateÿ´ÎÊÇÖ±½ÓÖ´ÐÐÐÞ¸ÄÓï¾ä£»¶ømergeÊÇÏÈÔÚ»º´æÖвéÕÒ£¬»º´æÖÐûÓÐÏàÓ¦Êý¾Ý£¬¾Íµ½Êý¾Ý¿âÈ¥²éѯ£¬È»ºóÔٺϲ¢Êý¾Ý£¬Èç¹ûÊý¾ÝÊÇÒ»ÑùµÄ£¬ÄÇômerge·½·¨²»»áÈ¥×öÐ޸ģ¬Èç¹ûÊý¾ÝÓв»Ò»ÑùµÄµØ·½£¬merge²ÅÕæÕýÐÞ¸ÄÊý¾Ý¿â¡£
2£ºÈç¹ûÊý¾Ý¿âÖв»´æÔÚÄãÒªÐ޸ĵļǼ£¬updateÊDZ¨´í£»¶ømerge·½·¨Êǵ±×÷Ò»ÌõÐÂÔöµÄÖµ£¬ÏòÊý¾Ý¿âÖÐÐÂÔöÒ»ÌõÊý¾Ý¡£
3£ºupdateºó£¬´«ÈëµÄTO¶ÔÏó¾ÍÊÇPOµÄÁË£¬¶ømerge»¹ÊÇTOµÄ¡£
4£ºÈç¹ûÄãÈ·¶¨µ±Ç°sessionûÓаüº¬ÓëÖ®¾ßÓÐÏàͬ³Ö¾Ã»¯±êʶµÄ³Ö¾ÃʵÀý£¬Ê¹ÓÃupdate()¡£Èç¹ûÏëËæÊ±ºÏ²¢¸Ä¶¯¶ø²»¿¼ÂÇsessionµÄ״̬£¬Ê¹ÓÃmerge()¡£»»¾ä»°Ëµ£¬ÔÚÒ»¸öÐÂsessionÖÐͨ³£µÚÒ»¸öµ÷ÓõÄÊÇupdate()·½·¨£¬ÒÔ±£Ö¤ÖØÐ¹ØÁªÍѹܶÔÏóµÄ²Ù×÷Ê×Ïȱ»Ö´ÐС£
5£ºÇë×¢Ò⣺ʹÓÃupdateÀ´°ÑÒ»¸öTO±ä³ÉPO£¬ÄÇô²»¹ÜÊÇ·ñÐÞ¸ÄÁ˶ÔÏ󣬶¼ÊÇÒªÖ´ÐÐupdate sqlÓï¾äµÄ¡£



ͨ³£ÏÂÃæµÄ³¡¾°»áʹÓà update() »ò saveOrUpdate()
1£º³ÌÐòÔÚµÚÒ»¸ö session ÖмÓÔØ¶ÔÏó
2£º¸Ã¶ÔÏó±»´«µÝµ½±íÏÖ²ã
3£º¶ÔÏó·¢ÉúÁËһЩ¸Ä¶¯
4£º¸Ã¶ÔÏó±»·µ»Øµ½ÒµÎñÂß¼­²ã
5£º³ÌÐòµ÷Óõڶþ¸ösessionµÄupdate()·½·¨³Ö¾ÃÕâЩ¸Ä¶¯

saveOrUpdate·½·¨×öÏÂÃæµÄÊ£º
1£ºÈç¹û¶ÔÏóÒѾ­ÔÚ±¾sessionÖг־û¯ÁË£¬²»×öÈκÎÊÂ
2£ºÈç¹ûÁíÒ»¸öÓë±¾session¹ØÁªµÄ¶ÔÏóÓµÓÐÏàͬµÄ³Ö¾Ã»¯±êʶ£¬Å׳öÒ»¸öÒì³£
3£ºÈç¹û¶ÔÏóûÓг־û¯±êʶÊôÐÔ£¬¶ÔÆäµ÷Óà save()
4£ºÈç¹û¶ÔÏóµÄ³Ö¾Ã±êʶ±íÃ÷ÆäÊÇÒ»¸öÐÂʵÀý»¯µÄ¶ÔÏó£¬¶ÔÆäµ÷Óà save()¡£
5£ºÈç¹û¶ÔÏóÊǸ½´ø°æ±¾ÐÅÏ¢µÄ£¨Í¨¹ý »ò £©²¢ÇÒ°æ±¾ÊôÐÔµÄÖµ±íÃ÷ÆäÊÇÒ»¸öÐÂʵÀý»¯µÄ¶ÔÏó£¬save() Ëü¡£
6£º·ñÔòupdate()Õâ¸ö¶ÔÏó


merge×öÈçϵÄÊÂÇé
1£ºÈç¹ûsessionÖдæÔÚÏàͬ³Ö¾Ã»¯±êʶµÄʵÀý£¬ÓÃÓû§¸ø³öµÄ¶ÔÏóµÄ״̬¸²¸Ç¾ÉÓеij־ÃʵÀý
2£ºÈç¹ûsessionÖÐûÓÐÏàÓ¦µÄ³Ö¾ÃʵÀý£¬Ôò³¢ÊÔ´ÓÊý¾Ý¿âÖмÓÔØ£¬»ò´´½¨Ðµij־û¯ÊµÀý
3£º×îºó·µ»Ø¸Ã³Ö¾ÃʵÀý
4£ºÓû§¸ø³öµÄÕâ¸ö¶ÔÏóûÓб»¹ØÁªµ½ session ÉÏ£¬ËüÒÀ¾ÉÊÇÍѹܵÄ

°´Ö÷¼ü²éѯ
1£ºload·½·¨£ºloadµÄʱºòÊ×ÏȲéѯһ¼¶»º´æ£¬Ã»Óоʹ´½¨²¢·µ»ØÒ»¸ö´úÀí¶ÔÏ󣬵ȵ½Ê¹ÓõÄʱºò£¬²Å²é¶þ¼¶»º´æ£¬Èç¹û¶þ¼¶»º´æÖÐûÓÐÊý¾Ý¾Í²éÊý¾Ý¿â£¬Èç¹ûÊý¾Ý¿âÖÐûÓУ¬¾ÍÅ×ÀýÍâ
2£ºget·½·¨£ºÏȲ黺´æ£¬Èç¹û»º´æÖÐûÓÐÕâÌõ¾ßÌåµÄÊý¾Ý£¬¾Í²éÊý¾Ý¿â£¬Èç¹ûÊý¾Ý¿âûÓÐÖµ£¬¾Í·µ»Ønull£¬×ÜÖ®get·½·¨²»¹ÜÓò»Ó㬶¼ÒªÄõ½ÕæÊµµÄÊý¾Ý
HibernateʵÏÖ°´Ìõ¼þ²éѯµÄ·½Ê½
1£º×îÖØÒªµÄ°´Ìõ¼þ²éѯµÄ·½·¨ÊÇʹÓÃQuery½Ó¿Ú£¬Ê¹ÓÃHQL
2£º±¾µØ²éѯ£¨native sql£©£º¾ÍÊÇʹÓñê×¼µÄsql£¬Ò²ÊÇͨ¹ýQuery½Ó¿ÚÀ´ÊµÏÖ
3£º°´Ìõ¼þ²éѯ£¨Query By Criteria£¬QBC£©£ºÊ¹Óö¯Ì¬µÄ£¬ÃæÏò¶ÔÏóµÄ·½Ê½À´´´½¨²éѯ
4£º°´ÑùÀý²éѯ£¨Query By Example£¬¼òдQBE£©£ºÀàËÆÎÒÃÇ×Ô¼ºÐ´µÄgetByCondition
5£ºÃüÃû²éѯ£ºÔÚhbm.xmlÖÐÅäÖÃhqlÓï¾ä£¬ÔÚ³ÌÐòÀïÃæÍ¨¹ýÃû³ÆÀ´´´½¨Query½Ó¿Ú
QueryµÄlist·½·¨
Ò»¸ö²éѯͨ³£ÔÚµ÷Óà list() ʱ±»Ö´ÐУ¬Ö´Ðнá¹û»áÍêÈ«×°ÔØ½øÄÚ´æÖеÄÒ»¸ö¼¯ºÏ£¬²éѯ·µ»ØµÄ¶ÔÏó´¦ÓÚ³Ö¾Ã״̬¡£Èç¹ûÄãÖªµÀµÄ²éѯֻ»á·µ»ØÒ»¸ö¶ÔÏ󣬿ÉʹÓà list() µÄ¿ì½Ý·½Ê½ uniqueResult()¡£
IteratorºÍList
ijЩÇé¿öÏ£¬Äã¿ÉÒÔʹÓÃiterate()·½·¨µÃµ½¸üºÃµÄÐÔÄÜ¡£ Õâͨ³£ÊÇÄãÔ¤ÆÚ·µ»ØµÄ½á¹ûÔÚsession£¬»ò¶þ¼¶»º´æ(second-level cache)ÖÐÒѾ­´æÔÚʱµÄÇé¿ö¡£ ÈçÈô²»È»£¬iterate()»á±Èlist()Âý£¬¶øÇÒ¿ÉÄܼòµ¥²éѯҲÐèÒª½øÐжà´ÎÊý¾Ý¿â·ÃÎÊ£º iterate()»áÊ×ÏÈʹÓÃ1ÌõÓï¾äµÃµ½ËùÓжÔÏóµÄ³Ö¾Ã»¯±êʶ(identifiers)£¬ÔÙ¸ù¾Ý³Ö¾Ã»¯±êʶִÐÐnÌõ¸½¼ÓµÄselectÓï¾äʵÀý»¯Êµ¼ÊµÄ¶ÔÏó¡£

ÍâÖÃÃüÃû²éѯ
¿ÉÒÔÔÚÓ³ÉäÎļþÖж¨ÒåÃüÃû²éѯ(named queries)¡£

java´úÂ룺
1.
2.
3.

²ÎÊý°ó¶¨¼°Ö´ÐÐÒÔ±à³Ì·½Ê½Íê³É£º
List list = s.getNamedQuery("cn.javass.h3.hello.UserModel.javass").list();
×¢ÒâÒªÓÃÈ«ÏÞ¶¨Ãû¼ÓÃû³ÆµÄ·½Ê½½øÐзÃÎÊ

flush·½·¨
ÿ¼ä¸ôÒ»¶Îʱ¼ä£¬Session»áÖ´ÐÐһЩ±ØÐèµÄSQLÓï¾äÀ´°ÑÄÚ´æÖжÔÏóµÄ״̬ͬ²½µ½JDBCÁ¬½ÓÖС£Õâ¸ö¹ý³Ì±»³ÆÎªË¢³ö(flush)£¬Ä¬ÈÏ»áÔÚÏÂÃæµÄʱ¼äµãÖ´ÐУº
1£ºÔÚijЩ²éѯִÐÐ֮ǰ
2£ºÔÚµ÷ÓÃorg.hibernate.Transaction.commit()µÄʱºò
3£ºÔÚµ÷ÓÃSession.flush()µÄʱºò
Éæ¼°µÄ SQL Óï¾ä»á°´ÕÕÏÂÃæµÄ˳Ðò·¢³öÖ´ÐУº
1. ËùÓжÔʵÌå½øÐвåÈëµÄÓï¾ä£¬Æä˳Ðò°´ÕÕ¶ÔÏóÖ´ÐÐsave() µÄʱ¼ä˳Ðò
2