Hibernate4ʵս Ö®µÚÆß²¿·Ö£º×î¼Ñʵ¼ù

2014-11-24 08:31:57 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 1
Éè¼ÆÏ¸¿ÅÁ£¶ÈµÄ³Ö¾ÃÀಢÇÒʹÓÃÀ´ÊµÏÖÓ³Éä¡£
ÀýÈçʹÓÃÒ»¸öAddress³Ö¾ÃÀàÀ´·â×° street, suburb, state, postcode. Õ⽫ÓÐÀûÓÚ´úÂëÖØÓúͼò»¯´úÂëÖØ¹¹(refactoring)µÄ¹¤×÷¡£
¶Ô³Ö¾ÃÀàÉùÃ÷±êʶ·ûÊôÐÔ( identifier properties)¡£
HibernateÖбêʶ·ûÊôÐÔÊÇ¿ÉÑ¡µÄ£¬²»¹ýÓкܶàÔ­ÒòÀ´ËµÃ÷ÄãÓ¦¸ÃʹÓñêʶ·ûÊôÐÔ¡£ÎÒÃǽ¨Òé±êʶ·ûÓ¦¸ÃÊÇ¡°ÈËÔ족µÄ(×Ô¶¯Éú³É£¬²»Éæ¼°ÒµÎñº¬Òå)¡£
ʹÓÃ×ÔÈ»¼ü(natural keys)±êʶ
¶ÔËùÓеÄʵÌå¶¼±êʶ³ö×ÔÈ»¼ü£¬ÓýøÐÐÓ³É䡣ʵÏÖequals()ºÍhashCode()£¬ÔÚÆäÖÐÓÃ×é³É×ÔÈ»¼üµÄÊôÐÔ½øÐбȽϡ£
Ϊÿ¸ö³Ö¾ÃÀàдһ¸öÓ³ÉäÎļþ
²»Òª°ÑËùÓеij־ÃÀàÓ³É䶼дµ½Ò»¸ö´óÎļþÖС£°Ñ com.eg.Foo Ó³Éäµ½com/eg/Foo.hbm.xmlÖУ¬ ÔÚÍŶӿª·¢»·¾³ÖУ¬ÕâÒ»µãÏÔµÃÌØ±ðÓÐÒâÒå¡£
°ÑÓ³ÉäÎļþ×÷Ϊ×ÊÔ´¼ÓÔØ
°ÑÓ³ÉäÎļþºÍËûÃǵÄÓ³ÉäÀà·ÅÔÚÒ»Æð½øÐв¿Êð¡£
¿¼ÂǰѲéѯ×Ö·û´®·ÅÔÚ³ÌÐòÍâÃæ
Èç¹ûÄãµÄ²éѯÖе÷ÓÃÁË·ÇANSI±ê×¼µÄSQLº¯Êý£¬ÄÇôÕâÌõʵ¼ù¾­Ñé¶ÔÄãÊÊÓᣰѲéѯ×Ö·û´®·ÅÔÚÓ³ÉäÎļþÖпÉÒÔÈóÌÐò¾ßÓиüºÃµÄ¿ÉÒÆÖ²ÐÔ¡£
ʹÓð󶨱äÁ¿
¾ÍÏñÔÚJDBC ±à³ÌÖÐÒ»Ñù£¬Ó¦¸Ã×ÜÊÇÓÃռλ·û" "À´Ìæ»»·Ç³£Á¿Öµ£¬²»ÒªÔÚ²éѯÖÐÓÃ×Ö·û´®ÖµÀ´¹¹Ôì·Ç³£Á¿Öµ£¡¸üºÃµÄ°ì·¨ÊÇÔÚ²éѯÖÐʹÓÃÃüÃû²ÎÊý¡£
²»Òª×Ô¼ºÀ´¹ÜÀíJDBC connections
HibernateÔÊÐíÓ¦ÓóÌÐò×Ô¼ºÀ´¹ÜÀíJDBC connections£¬µ«ÊÇÓ¦¸Ã×÷Ϊ×îºóûÓа취µÄ°ì·¨¡£Èç¹ûÄã²»ÄÜʹÓÃHibernateÄÚ½¨µÄconnections providers£¬ÄÇô¿¼ÂÇʵÏÖ×Ô¼ºÀ´ÊµÏÖorg.hibernate.connection.ConnectionProvider
¿¼ÂÇʹÓÃÓû§×Ô¶¨ÒåÀàÐÍ(custom type)
¼ÙÉèÄãÓÐÒ»¸öJavaÀàÐÍ£¬À´×ÔijЩÀà¿â£¬ÐèÒª±»³Ö¾Ã»¯£¬µ«ÊǸÃÀàûÓÐÌṩӳÉä²Ù×÷ÐèÒªµÄ´æÈ¡·½·¨¡£ÄÇôÄãÓ¦¸Ã¿¼ÂÇʵÏÖorg.hibernate.UserType½Ó¿Ú¡£ÕâÖְ취ʹ³ÌÐò´úÂëдÆðÀ´¸ü¼Ó×ÔÈ磬²»ÔÙÐèÒª¿¼ÂÇÀàÓëHibernate typeÖ®¼äµÄÏ໥ת»»¡£
ÔÚÐÔÄÜÆ¿¾±µÄµØ·½Ê¹ÓÃÓ²±àÂëµÄJDBC
ÔÚϵͳÖжÔÐÔÄÜÒªÇóºÜÑϸñµÄһЩ²¿·Ö£¬Ä³Ð©²Ù×÷Ò²ÐíÖ±½ÓʹÓÃJDBC»á¸üºÃ¡£µ«ÊÇÇëÏÈÈ·ÈÏÕâµÄÈ·ÊÇÒ»¸öÆ¿¾±£¬²¢ÇÒ²»ÒªÏ뵱ȻÈÏΪJDBCÒ»¶¨»á¸ü¿ì¡£Èç¹ûȷʵÐèÒªÖ±½ÓʹÓÃJDBC£¬ÄÇô×îºÃ´ò¿ªÒ»¸ö Hibernate Session È»ºó´Ó Session»ñµÃconnection£¬°´ÕÕÕâÖÖ°ì·¨ÄãÈÔÈ»¿ÉÒÔʹÓÃͬÑùµÄtransaction²ßÂԺ͵ײãµÄconnection provider¡£
Àí½âSessionÇåÏ´£¨ flushing£©
Session»á²»Ê±µÄÏò Êý¾Ý¿âͬ²½³Ö¾Ã»¯×´Ì¬£¬Èç¹ûÕâÖÖ²Ù×÷½øÐеĹýÓÚÆµ·±£¬ÐÔÄÜ»áÊܵ½Ò»¶¨µÄÓ°Ïì¡£ÓÐʱºòÄã¿ÉÒÔͨ¹ý½ûÖ¹×Ô¶¯flushing£¬¾¡Á¿×îС»¯·Ç±ØÒªµÄflushing²Ù×÷£¬»òÕ߸ü½øÒ»²½£¬ÔÚÒ»¸öÌØ¶¨µÄtransactionÖиıä²éѯºÍÆäËü²Ù×÷µÄ˳Ðò¡£
ÔÚÈý²ã½á¹¹ÖУ¬¿¼ÂÇʹÓÃÍйܶÔÏó£¨detached object£©
µ±Ê¹ÓÃÒ»¸öservlet / session bean ÀàÐ͵ļܹ¹µÄʱºò, Äã¿ÉÒÔ°ÑÒѼÓÔØµÄ³Ö¾Ã¶ÔÏóÔÚsession bean²ãºÍservlet / JSP ²ãÖ®¼äÀ´»Ø´«µÝ¡£Ê¹ÓÃеÄsessionÀ´ÎªÃ¿¸öÇëÇó·þÎñ£¬Ê¹Óà Session.merge() »òÕßSession.saveOrUpdate()À´ÓëÊý¾Ý¿âͬ²½¡£
ÔÚÁ½²ã½á¹¹ÖУ¬¿¼ÂÇʹÓó¤³Ö¾ÃÉÏÏÂÎÄ(long persistence contexts).
ΪÁ˵õ½×î¼ÑµÄ¿ÉÉìËõÐÔ£¬Êý¾Ý¿âÊÂÎñ(Database Transaction)Ó¦¸Ã¾¡¿ÉÄܵÄ
¶Ì¡£µ«ÊÇ£¬³ÌÐò³£³£ÐèҪʵÏÖ³¤Ê±¼äÔËÐеġ°Ó¦ÓóÌÐòÊÂÎñ(Application
Transaction)¡±£¬°üº¬Ò»¸ö´ÓÓû§µÄ¹ÛµãÀ´¿´µÄÔ­×Ó²Ù×÷¡£Õâ¸öÓ¦ÓóÌÐòÊÂÎñ
¿ÉÄÜ¿çÔ½¶à´Î´ÓÓû§ÇëÇ󵽵õ½·´À¡µÄÑ­»·¡£ÓÃÍѹܶÔÏó(ÓësessionÍÑÀëµÄ¶Ô
Ïó)À´ÊµÏÖÓ¦ÓóÌÐòÊÂÎñÊdz£¼ûµÄ¡£»òÕߣ¬ÓÈÆäÔÚÁ½²ã½á¹¹ÖУ¬°ÑHibernate
Session´ÓJDBCÁ¬½ÓÖÐÍÑÀ뿪£¬Ï´ÎÐèÒªÓõÄʱºòÔÙÁ¬½ÓÉÏ¡£¾ø²»Òª°ÑÒ»¸ö
SessionÓÃÔÚ¶à¸öÓ¦ÓóÌÐòÊÂÎñ(Application Transaction)ÖУ¬·ñÔòÄãµÄÊý¾Ý
¿ÉÄÜ»á¹ýÆÚʧЧ¡£
²»Òª°ÑÒì³£¿´³É¿É»Ö¸´µÄ
ÕâÒ»µãÉõÖÁ±È¡°×î¼Ñʵ¼ù¡±»¹ÒªÖØÒª£¬ÕâÊÇ¡°±Ø±¸³£Ê¶¡±¡£µ±Òì³£·¢ÉúµÄʱ
ºò£¬±ØÐëÒª»Ø¹ö Transaction £¬¹Ø±ÕSession¡£Èç¹ûÄã²»ÕâÑù×öµÄ»°£¬
HibernateÎÞ·¨±£Ö¤ÄÚ´æ×´Ì¬¾«È·µÄ·´Ó¦³Ö¾Ã״̬¡£ÓÈÆä²»ÒªÊ¹ÓÃ
Session.load()À´ÅжÏÒ»¸ö¸ø¶¨±êʶ·ûµÄ¶ÔÏóʵÀýÔÚÊý¾Ý¿âÖÐÊÇ·ñ´æÔÚ£¬Ó¦¸Ã
ʹÓÃSession.get()»òÕß½øÐÐÒ»´Î²éѯ.
¶ÔÓÚ¹ØÁªÓÅÏÈ¿¼ÂÇlazy fetching
½÷É÷µÄʹÓÃÖ÷¶¯×¥È¡(eager fetching)¡£¶ÔÓÚ¹ØÁªÀ´Ëµ£¬ÈôÆäÄ¿±êÊÇÎÞ·¨ÔÚµÚ¶þ¼¶»º´æÖÐÍêÈ«»º´æËùÓÐʵÀýµÄÀ࣬Ӧ¸ÃʹÓôúÀí(proxies)Óë/»ò¾ßÓÐÑÓ³Ù¼ÓÔØÊôÐԵļ¯ºÏ(lazy collections)¡£ÈôÄ¿±êÊÇ¿ÉÒÔ±»»º´æµÄ£¬ÓÈÆäÊÇ»º´æµÄÃüÖÐÂʷdz£¸ßµÄÇé¿öÏ£¬Ó¦¸ÃʹÓÃlazy="false"£¬Ã÷È·µÄ½ûÖ¹µôeager fetching¡£Èç¹ûÄÇÐ©ÌØÊâµÄȷʵÊʺÏʹÓÃjoin fetch µÄ³¡ºÏ£¬ÇëÔÚ²éѯÖÐʹÓÃleft join fetch¡£
ʹÓÃopen session in viewģʽ£¬»òÕßÖ´ÐÐÑϸñµÄ×°ÅäÆÚ(assembly phase)²ßÂÔÀ´±ÜÃâÔÙ´ÎץȡÊý¾Ý´øÀ´µÄÎÊÌâ
HibernateÈÿª·¢ÕßÃǰÚÍÑÁË·±ËöµÄData Transfer Objects (DTO)¡£ÔÚ´«Í³µÄEJB½á¹¹ÖУ¬DTOÓÐË«ÖØ×÷ÓãºÊ×ÏÈ£¬ËûÃǽâ¾öÁËentity beanÎÞ·¨ÐòÁл¯µÄÎÊÌ⣻Æä´Î£¬ËûÃÇÒþº¬µØ¶¨ÒåÁËÒ»¸ö×°ÅäÆÚ£¬ÔÚ´ËÆÚ¼ä£¬ËùÓÐÔÚview²ãÐèÒªÓõ½µÄÊý¾Ý£¬¶¼±»×¥È¡¡¢¼¯Öе½ÁËDTOÖУ¬È»ºó¿ØÖƲű»×°µ½±íʾ²ã¡£HibernateÖÕ½áÁ˵ÚÒ»¸ö×÷Óá£È»¶ø£¬³ý·ÇÄã×öºÃÁËÔÚÕû¸öäÖȾ¹ý³ÌÖж¼Î¬»¤Ò»¸ö´ò¿ªµÄ³Ö¾Ã»¯ÉÏÏÂÎÄ(session)µÄ×¼±¸£¬ÄãÈÔÈ»ÐèÒªÒ»¸ö×°ÅäÆÚ£¨ÏëÏóһϣ¬ÄãµÄÒµÎñ·½·¨ÓëÄãµÄ±íʾ²ãÓÐÑϸñµÄÆõÔ¼£¬Êý¾Ý×ÜÊDZ»·ÅÖõ½ÍйܶÔÏóÖУ©¡£Õâ²¢·ÇÊÇHibernateµÄÏÞÖÆ£¡ÕâÊÇʵÏÖ°²È«µÄÊÂÎñ»¯Êý¾Ý·ÃÎʵĻù±¾ÐèÇó¡£
¿¼ÂǰÑHibernate´úÂë´ÓÒµÎñÂß¼­´úÂëÖгéÏó³öÀ´
°ÑHibernateµÄÊý¾Ý´æÈ¡´úÂëÒþ²Øµ½½Ó¿Ú(interface)µÄºóÃæ£¬×éºÏʹÓÃDAOºÍThread Local Sessionģʽ¡£Í¨¹ýHibernateµÄUserType£¬ÄãÉõÖÁ¿ÉÒÔÓÃÓ²±àÂëµÄJDBCÀ´³Ö¾Ã»¯ÄÇЩ±¾¸Ã±»Hibernate³Ö¾Ã»¯µÄÀà¡£ (¸Ã½¨Òé¸üÊÊÓÃÓÚ¹æÄ£×ã¹»´óÓ¦ÓÃÈí¼þÖУ¬¶ÔÓÚÄÇЩֻÓÐ5ÕűíµÄÓ¦ÓóÌÐò²¢²»Êʺϡ£)²»ÒªÓùÖÒìµÄÁ¬½ÓÓ³Éä
¶à¶Ô¶àÁ¬½ÓÓõúõÄÀý×Óʵ¼ÊÉÏÏ൱ÉÙ¼û¡£´ó¶àÊýʱºòÄãÔÚ¡°Á¬½Ó±í¡±ÖÐÐèÒª±£´æ¶îÍâµÄÐÅÏ¢¡£ÕâÖÖÇé¿öÏ£¬ÓÃÁ½¸öÖ¸ÏòÖнéÀàµÄÒ»¶Ô¶àµÄÁ¬½Ó±È½ÏºÃ¡£Êµ¼ÊÉÏ£¬ÎÒÃÇÈÏΪ¾ø´ó¶àÊýµÄÁ¬½ÓÊÇÒ»¶Ô¶àºÍ¶à¶ÔÒ»µÄ£¬ÄãÓ¦¸Ã½÷É÷ʹÓÃÆäËüÁ¬½Ó·ç¸ñ£¬ÓÃ֮ǰÎÊ×Ô¼ºÒ»¾ä£¬ÊÇ·ñÕæµÄ±ØÐëÕâô×ö¡£
Æ«°®Ë«Ïò¹ØÁª
µ¥Ïò¹ØÁª¸ü¼ÓÄÑÓÚ²éѯ¡£ÔÚ´óÐÍÓ¦ÓÃÖУ¬¼¸ºõËùÓеĹØÁª±ØÐëÔÚ²éѯÖпÉÒÔË«Ïòµ¼º½¡£
×÷Õߣºjinnianshilongnian