·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
[¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ] ¨ê OR ¸ÊÇÎ Åø ÇÏÀ̹ö³×ÀÌÆ®
OR ¸ÊÇÎ µµ±¸ÀÇ ¼±µÎ ÁÖÀÚ, ÇÏÀ̹ö³×ÀÌÆ®
±è½Â±Ç, ÀÌÁ¾ÇÏ   2005/01/18
¿¬Àç¼ø¼­
1ȸ, ¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ, ±× Áñ°Å¿î µµÀüÀÇ ½ÃÀÛ
2ȸ, ù¹øÂ° µµÀü! ½ºÆ®·µÃ÷¿Í º§·Î½ÃƼÀÇ ÅëÇÕ
3ȸ, ¾àÇÑ °áÇÕµµ ¾ÆÅ°ÅØÃ³¸¦ À§ÇÑ ´ë¾È ±â¼ú, ½ºÇÁ¸µ
4ȸ, OR ¸ÊÇÎ µµ±¸ÀÇ ¼±µÎ ÁÖÀÚ, ÇÏÀ̹ö³×ÀÌÆ®
[Áöµð³ÝÄÚ¸®¾Æ]Áö³­ ±Û¿¡¼­´Â ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¼Ò°³ÇÏ°í ½ºÇÁ¸µÀÇ WebMVC ¸ðµâÀ» ÀÌ¿ëÇØ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â ¹æ¹ý°ú ½ºÆ®·µÃ÷¿ÍÀÇ ¿¬µ¿ ¹æ¹ý¿¡ ´ëÇØ »ìÆìº¸¾Ò´Ù. À̹ø ±Û¿¡¼­´Â OR ¸ÊÇÎ µµ±¸ÀÇ ¼±µÎ ÁÖÀÚÀÎ ÇÏÀ̹ö³×ÀÌÆ®¿¡ ´ëÇØ »ìÆìº¸°í, ÇÏÀ̹ö³×ÀÌÆ®°¡ ¾î¶»°Ô ½ºÇÁ¸µ°ú °áÇÕÇÏ¿© ½Ã³ÊÁö È¿°ú¸¦ ¹ßÈÖÇÏ´ÂÁö »ìÆìº¸µµ·Ï ÇÏÀÚ.

¿£ÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼­´Â µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿ÇÏ¿© CRUD ¿¬»êÀ» ¼öÇàÇÒ ÆÛ½Ã½ºÅϽº °èÃþÀ» ¸¸µé°í, À¯Áö º¸¼öÇÏ´Â ÀÛ¾÷¿¡ »ó´çÇÑ ½Ã°£°ú ³ë·ÂÀ» ÅõÀÚÇÏ°Ô µÈ´Ù. ¸¸ÀÏ µ¥ÀÌÅͺ£À̽ºÀÇ ½ºÅ°¸¶°¡ ¹Ù²î´Â °æ¿ì¿¡´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ ³ª¸ÓÁö ºÎºÐµµ Å©°Ô º¯°æÇØ¾ß ÇÑ´Ù.

´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÌ °´Ã¼ÁöÇâ ±â¼úÀ» »ç¿ëÇϰí ÀÖ´Â µ¥ ¹ÝÇØ, µ¥ÀÌÅͺ£À̽º´Â °ü°èÇü µ¥ÀÌÅÍ ¸ðµ¨À» »ç¿ëÇÏ´Â RDBMS¸¦ ÀÌ¿ëÇϰí ÀÖ´Ù. ÀÌ·Î ÀÎÇØ °´Ã¼ ¸ðµ¨¸µ°ú °ü°èÇü µ¥ÀÌÅÍ ¸ðµ¨¸µ »çÀÌ¿¡ °³³äÀû ºÒÀÏÄ¡°¡ Á¸ÀçÇÏ°Ô µÇ°í, °ÅÀÇ ¸ðµç ÇÁ·ÎÁ§Æ®¿¡¼­´Â ÆÛ½Ã½ºÅϽº °èÃþÀÇ ±¸Çö¿¡ ½É°¢ÇÑ ¼öÁØÀÇ º¹Àâµµ ºÎ´ãÀ» ¶°¾È°Ô µÇ´Â °ÍÀÌ´Ù.

ÀÌ·¯ÇÑ ¹®Á¦µéÀ» ÇØ°áÇϱâ À§ÇØ OR ¸ÊÇÎÀ» ÀÚµ¿È­ÇØ ÁÖ´Â ´Ù¾çÇÑ µµ±¸¿Í ±â¼úµéÀÌ µîÀåÇß´Ù. EJBÀÇ CMP(ÄÁÅ×ÀÌ³Ê °ü¸® ÆÛ½Ã½ºÅϽº) ¹æ½ÄÀÇ ¿£Æ¼Æ¼ ºóµµ ÀÖ°í, CocoBase³ª TopLink¿Í °°Àº Àü¹® Á¦Ç°µéµµ ÀÖ´Ù. ÃÖ±Ù OR ¸ÊÇÎ µµ±¸·Î½á ÁÖ¸ñÀ» ²ø°í ÀÖ´Â °ÍÀº XMLÀ» »ç¿ëÇÏ´Â ÆÛ½Ã½ºÅϽº ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù.

ÆÛ½Ã½ºÅϽº ÇÁ·¹ÀÓ¿öÅ©ÀÇ ´ëÇ¥ ÁÖÀÚ´Â JDO(Java Data Object)ÀÇ ¾ÆÆÄÄ¡ ±¸ÇöÀÎ OJB(ObJect Relational Bridge)¿Í iBatis ±×¸®°í ÇÏÀ̹ö³×ÀÌÆ®(Hibernate)ÀÌ´Ù. OJBÀÇ °æ¿ì ½ãÀÇ Ç¥ÁØ ½ºÆåÀÎ JDO¸¦ ±¸ÇöÇÑ Á¡°ú ¿ÀǼҽºÀÇ »ê½ÇÀÎ ¾ÆÆÄÄ¡ ÇÁ·ÎÁ§Æ®·Î ÁøÇàµÈ´Ù´Â Á¡ÀÌ °­Á¡ÀÌ´Ù. OJB¿¡ °üÇØ¼­´Â ÀÌ¹Ì ¿¬ÀçµÈ ÀûÀÌ ÀÖÀ¸¹Ç·Î ÀÚ¼¼ÇÑ ³»¿ëÀº ÇØ´ç ±ÛÀ» ã¾Æº¸±â ¹Ù¶õ´Ù.

ÃÖ±Ù¿¡´Â OJBº¸´Ù iBatis¿Í ÇÏÀ̹ö³×ÀÌÆ®¿¡ ´ëÇÑ °ü½ÉÀÌ ´õ ³ôÀº µí ÇÏ´Ù. iBatis¿Í ÇÏÀ̹ö³×ÀÌÆ®ÀÇ °¡Àå Å« Â÷ÀÌÁ¡Àº ¸ÊÇÎ ¹æ¹ý¿¡ ÀÖ´Ù. µÑ ´Ù OR ¸ÊÇÎÀ» À§ÇØ XMLÀ» »ç¿ëÇϰí ÀÖÁö¸¸, iBatis´Â SQL Äõ¸®¸¦ »ç¿ëÇØ¼­ ¸ÊÇÎÇÏ´Â ¹Ý¸é¿¡ ÇÏÀ̹ö³×ÀÌÆ®´Â Å×À̺íÀÇ Ä÷³°ú ÀÚ¹Ù °´Ã¼ÀÇ ¼Ó¼ºÀ» ¸ÊÇÎÇÑ´Ù.

iBatis´Â °³¹ßÀڵ鿡°Ô Àͼ÷ÇÑ SQL Äõ¸®¸¦ Á÷Á¢ »ç¿ëÇϱ⠶§¹®¿¡ °³³äÀûÀÎ ¿À¹öÇìµå°¡ ÀûÀº ÆíÀÌ´Ù. µû¶ó¼­ OR ¸ÊÇÎ µµ±¸¿¡ Àͼ÷ÇÏÁö ¾ÊÀº °³¹ßÀÚ¶ó°í ÇÏ´õ¶óµµ ½±°Ô ÀûÀÀÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ DB Àü¹®°¡µéÀÇ Æ©´× ³ëÇϿ찡 Á¢¸ñµÈ SQLÀ» ÀÚÀ¯·Ó°Ô ÀÌ¿ëÇØ °¢ DBMSÀÇ ÀåÁ¡À» Àû±Ø ¼ö¿ëÇÒ ¼ö ÀÖ´Ù´Â °Íµµ ÀåÁ¡ÀÌ´Ù. ÇÏÁö¸¸ ±âÁ¸ÀÇ °³¹ß ¹æ¹ý°ú À¯»çÇÑ Á¡ÀÌ ¸¹±â ¶§¹®¿¡ °³¹ß ¼Óµµ³ª ¹®Á¦¸¦ ÇØ°áÇÏ´Â ÆÐ·¯´ÙÀÓ ÀÚü¸¦ ´«¿¡ ¶é ¸¸Å­ °³¼±ÇØ ÁÖÁö´Â ¸øÇÑ´Ù.

ÇÏÀ̹ö³×ÀÌÆ®ÀÇ °æ¿ì´Â iBatis¿Í ¹Ý´ëÀÌ´Ù. ÇÏÀ̹ö³×ÀÌÆ®´Â SQL ÀÚü¸¦ ³»ºÎÀûÀ¸·Î ¼û°Ü¼­ °³¹ßÀÚ¿¡°Ô º¸¿©ÁÖÁö ¾Ê´Â´Ù. µ¥ÀÌÅÍÀÇ ±âº» CRUD ¿¬»êÀº ¸ÊÇÎµÈ ÀÚ¹Ù °´Ã¼¸¦ ÅëÇØ ÀÌ·ç¾îÁø´Ù. ÇÏÀ̹ö³×ÀÌÆ®¸¦ º¸´Ù ´õ °´Ã¼ÁöÇâÀûÀ̸ç, ÀÚ¹Ù´Ù¿î ¹æ¹ýÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. ÇÏÁö¸¸ OR ¸ÊÇÎÀÇ °³³ä¿¡ Àͼ÷ÇØÁö±â±îÁö ¿À·£ ½Ã°£ÀÌ °É¸®´Â ´ÜÁ¡ÀÌ ÀÖ¾î, ½Ç¹«¿¡¼­ »ç¿ëÇϱâ À§Çؼ­´Â ±â¼ú ±³À°¿¡ »ó´çÇÑ ½Ã°£ÀÌ ¼Ò¿äµÇ´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.

°á·ÐÀûÀ¸·Î ¿£Æ¼Æ¼ ºóÀÇ ´ë¾ÈÀ¸·Î °Å·ÐµÇ´Â ÆÛ½Ã½ºÅϽº ÇÁ·¹ÀÓ¿öÅ© Áß ´çÀå ½Ç¹«¿¡¼­ »ç¿ëÇϱ⿡ ÀûÇÕÇÑ °ÍÀº iBatisÀÌ´Ù. ÇÏÁö¸¸ ÆÀ¿øµéÀÇ ±³À°¿¡ ÃæºÐÇÑ ½Ã°£À» ÇÒ¾ÖÇÒ ¿©À¯°¡ ÀÖ´Ù¸é ÇÏÀ̹ö³×ÀÌÆ®³ª OJBÀÇ »ç¿ëÀ» ±ÇÇÏ°í ½Í´Ù.

ÇÏÀ̹ö³×ÀÌÆ®ÀÇ °³¿ä
ÇÏÀ̹ö³×ÀÌÆ®´Â ÇöÀç ¼¼°èÀûÀ¸·Î °¡Àå ¸¹Àº °ü½ÉÀ» ¹Þ°í ÀÖ´Â ÀÚ¹Ù ±â¹ÝÀÇ OR ¸ÊÇÎ µµ±¸ÀÌ´Ù. ÇÏÀ̹ö³×ÀÌÆ®´Â LGPL·Î ¹èÆ÷µÇ°í ÀÖ´Ù. µû¶ó¼­ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®»Ó ¾Æ´Ï¶ó »ó¾÷¿ë ÇÁ·ÎÁ§Æ®¿¡¼­µµ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÇÏÀ̹ö³×ÀÌÆ®´Â ¿À¶óŬ, DB2, MySQLÀ» ºñ·ÔÇÑ ´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º¸¦ Áö¿øÇϸç, ½ºÆ®·µÃ÷, ½ºÇÁ¸µ, À¥¿öÅ© µîÀÇ À¯¸í ÇÁ·¹ÀÓ¿öÅ©µé°ú À¥·ÎÁ÷, À¥½ºÇǾî, JBoss, ÅèÄÏ µîÀÇ °¢Á¾ ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹öµé°úµµ ½±°Ô ¿¬µ¿µÉ ¼ö ÀÖ´Ù.

ÇÏÀ̹ö³×ÀÌÆ®´Â º¹ÇÕ Å¸ÀÔÀº ¹°·Ð, Ä÷º¼Ç°ú °´Ã¼ °ü°è¸¦ Áö¿øÇÑ´Ù. °´Ã¼¿¡ ´ëÇÑ ÆÛ½Ã½ºÅϽº¸¦ Á¦°øÇÏ´Â °ÍÀº ¹°·ÐÀ̰í, È¿À²ÀûÀΠij½Ì °èÃþ°ú JMX(Java Manage eXtensions)¸¦ Áö¿øÇÑ´Ù. ¶ÇÇÑ µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ °´Ã¼¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Â Äû¸® ¾ð¾îÀÎ HQL(Hibernate Query Language)µµ Á¦°øµÈ´Ù.  

ÇÏÀ̹ö³×ÀÌÆ®ÀÇ °¡Àå Å« ÀåÁ¡Àº ¹®¼­È­°¡ Àß µÇ¾î ÀÖ°í, ¸¹Àº ÀڷḦ È®º¸ÇÑ Ä¿¹Â´ÏƼÀÇ Áö¿øÀÌ Ãæ½ÇÇÏ´Ù´Â Á¡ÀÌ´Ù. ¶ÇÇÑ ¼ö¸¹Àº ³ë°¡´Ù¼º ÄÚµùÀ» ÇÏÁö ¾Êµµ·Ï ÀÚµ¿È­µÈ ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¦°øÇϰí ÀÖÀ½¿¡µµ ºÒ±¸Çϰí, ÀϹÝÀûÀÎ JDBC ±¸Çö¿¡ ºñ±³Çصµ µÚÁöÁö ¾Ê´Â ³ôÀº ¼º´ÉÀ» º¸ÀåÇÑ´Ù.

ÇÏÀ̹ö³×ÀÌÆ®°¡ Áö¿øÇÏ´Â ³ôÀº ¼º´ÉÀº Lazy Initializing ProxyÀÎ CGLIB¿Í °¢Á¾ ij½Ã Áö¿øÀ¸·Î ÀÌ·ïÁö´Âµ¥, ÇÏÀ̹ö³×ÀÌÆ®ÀÇ Ã¢½ÃÀÚÀÎ °¡ºó IJ(Gavin Kang)Àº ÇѶ§ µ¿ÀÏÇÑ SQLÀ» È£ÃâÇÏ´Â JDBC ÇÁ·Î±×·¥¿¡ ºñÇØ ÇÏÀ̹ö³×ÀÌÆ®°¡ ´À¸®´Ù´Â °ÍÀ» Áõ¸íÇÏ´Â »ç¶÷¿¡°Ô´Â ÀÚºñ·Î 100´Þ·¯¸¦ ÁöºÒÇÏ´Â À̺¥Æ®¸¦ ¹úÀ̱⵵ Çß´Ù. ¹°·Ð ±× µ·À» ¹Þ¾Æ°¬´Ù´Â »ç¶÷Àº ¾ø´Ù.

ÇöÀç ÇÏÀ̹ö³×ÀÌÆ®ÀÇ ÃֽйöÀüÀº 2.1.6À̸ç, 3.0 ¾ËÆÄ Å×½ºÆ® ¹öÀüÀÌ ¹èÆ÷µÇ°í ÀÖ´Ù. ÇÏÀ̹ö³×ÀÌÆ®´Â <±×¸² 1>¿¡¼­ º¸¿©Áö´Â °Íó·³ ¾ÖÇø®ÄÉÀ̼ǰú µ¥ÀÌÅͺ£À̽º »çÀÌÀÇ ÆÛ½Ã½ºÅϽº °èÃþÀ» ´ã´çÇÑ´Ù.

<±×¸² 1> ÇÏÀ̹ö³×ÀÌÆ®ÀÇ ±âº» ±¸Á¶

ÇÏÀ̹ö³×ÀÌÆ®´Â ÆÛ½Ã½ºÅϽº ¼­ºñ½º¸¦ ¾ÖÇø®ÄÉÀ̼ǿ¡ Á¦°øÇϱâ À§ÇØ ¸î °¡Áö ¼³Á¤ ÆÄÀÏÀ» ÇÊ¿ä·Î ÇÑ´Ù. ±âº» ¼³Á¤ ÆÄÀÏÀÎ hibernate.properties´Â µ¥ÀÌÅͺ£À̽º¿Í Á¢¼ÓÇϰųª ½ºÅ°¸¶¸¦ »ý¼ºÇÏ´Â µ¥ ÇÊ¿äÇÑ ±âº» Á¤º¸¸¦ ´ã°í ÀÖ´Ù. XML ¸ÊÇÎ ÆÄÀÏÀº CLASS_NAME.hbm.xmlÀÇ Çü½ÄÀ» °¡Áö¸ç ¿µ¼Ó °´Ã¼¿Í µ¥ÀÌÅͺ£À̽º Å×À̺íÀ» ¿¬°áÇÏ´Â, Áï OR ¸ÊÇο¡ ÇÊ¿äÇÑ °¢Á¾ ¸ÞŸ µ¥ÀÌÅ͸¦ Á¦°øÇÑ´Ù.

¿¹Á¦·Î ¾Ë¾Æº¸´Â ÇÏÀ̹ö³×ÀÌÆ®ÀÇ ±âÃÊ
ÀÌÁ¦ °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ ÇÏÀ̹ö³×ÀÌÆ®ÀÇ ±âº» °³³äÀ» ÀÍÇôº¸µµ·Ï ÇÏÀÚ. »ìÆìº¼ ¿¹Á¦´Â ÇÏÀ̹ö³×ÀÌÆ® ȨÆäÀÌÁö¸¦ ÅëÇØ Á¦°øµÇ´Â ºí·Î±× ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹Á¦¿¡¼­ »ç¿ëµÇ´Â Å×À̺íÀº BLOGS¿Í BLOG_ITEMSÀÌ´Ù. 1:M °ü°è¸¦ ±¸ÇöÇÑ ¿¹Á¦À̸ç, 1:1 ¶Ç´Â N:M ¿¹Á¦ ¶ÇÇÑ Á¦°øµÇ¹Ç·Î Âü°íÇϱ⠹ٶõ´Ù. ÀÌ ¿¹Á¦´Â JDK 1.4.2 ȯ°æ¿¡¼­ Å×½ºÆ®µÇ¾úÀ¸¸ç, »ç¿ëÇÑ ÇÏÀ̹ö³×ÀÌÆ® ¹öÀüÀº 2.1.6ÀÌ´Ù. IDE´Â ÀÌŬ¸³½º 3.1¿¡¼­ Hiber8ide Ç÷¯±×ÀÎÀ» ¼³Ä¡Çؼ­ »ç¿ëÇß°í, µ¥ÀÌÅͺ£À̽º´Â HSQLDB 1.7.2¸¦ ÀÌ¿ëÇß´Ù.

<±×¸² 2> ºí·Î±× ¿¹Á¦ÀÇ OR ¸ÊÇÎ °ü°è

¿¹Á¦´Â ÃÑ 4´Ü°è·Î ±¸¼ºµÇ¸ç, ÇÏÀ̹ö³×ÀÌÆ® ¸ÊÇÎ ÆÄÀÏÀÇ ÀÛ¼º¿¡¼­ºÎÅÍ, ÆÛ½Ã½ºÅϽº¸¦ Ç¥ÇöÇÏ´Â POJO¿Í DB ½ºÅ°¸¶°¡ »ý¼ºµÇ´Â °úÁ¤À» º¸¿©ÁÖ°Ô µÉ °ÍÀÌ´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î ÇÏÀ̹ö³×ÀÌÆ®¸¦ ÀÌ¿ëÇØ¼­ DB¿¡ ÀúÀåµÈ °ªÀ» °¡Á®¿À´Â ¹æ¹ýÀ» »ìÆìº¼ °ÍÀÌ´Ù.

<±×¸² 3> ºí·Î±× ¿¹Á¦ ÁøÇà °úÁ¤

1´Ü°è. ÇÏÀ̹ö³×ÀÌÆ® ¸ÊÇÎ ÆÄÀÏ ÀÛ¼º
¿ì¼± ÇÏÀ̹ö³×ÀÌÆ® ¸ÊÇÎ(HiBernate Mapping) Á¤º¸¸¦ ´ãÀº XML ÆÄÀÏÀÎ hbm.xmlÀ» Å×ÀÌºí¸¶´Ù »ý¼ºÇÑ´Ù. °¢°¢ÀÇ hbm.xml ÆÄÀÏÀº hibernate-mappingÀ̶ó´Â ·çÆ® ¿¤¸®¸ÕÆ®¸¦ °¡Áö¸ç, ÆÐŰÁö Á¤º¸¸¦ package ¼Ó¼ºÀ¸·Î ÁÖ°í ÀÖ´Ù.

Blog.hbm.xml
<hibernate-mapping package="vssh.model">
  <class name="Blog" table="BLOGS" lazy="true">
<cache usage="read-write"/> <!--¼º´É °ü·Ã element -->  
<id name="id" type="long" column="BLOG_ID">
        <generator class="native"/>
      </id>
      <property name="name" type="string" column="NAME" not-null="true" unique="true"/>
      <list name="items" inverse="true" lazy="true" order-by="DATE_TIME" cascade="all">
        <key column="BLOG_ID"/>
        <one-to-many class="vssh.model.BlogItem"/>
      </list>
  </class>
</hibernate-mapping>

BlogItem.hbm.xml
<hibernate-mapping package="vssh.model">
  <class name="BlogItem" table="BLOG_ITEMS" dynamic-update="true">
<cache usage="read-write"/> <!--¼º´É°ü·Ã element -->
    <id name="id" type="long" column="BLOG_ITEM_ID">
      <generator class="native"/>
    </id>
    <property name="title" type="string" column="TITLE" not-null="true"/>
    <property name="text" type="string" column="TEXT"  not-null="true"/>
    <property name="datetime" type="date" column="DATE_TIME" not-null="true"/>
    <many-to-one name="blog" class="vssh.model.Blog" column="BLOG_ID" not-null="true"/>
  </class>
</hibernate-mapping>

°¢°¢ÀÇ hibernate-mapping ¿¤¸®¸ÕÆ®´Â class ¿¤¸®¸ÕÆ®¸¦ Æ÷ÇÔÇÑ´Ù. class ¿¤¸®¸ÕÆ®´Â OR ¸ÊÇÎÀ» À§ÇÑ ÇÙ½É ¿ä¼Ò·Î °¢ ¼Ó¼ºÀº <Ç¥ 1>°ú °°Àº Àǹ̸¦ °¡Áø´Ù.

<Ç¥ 1> class ¿¤¸®¸ÕÆ®ÀÇ ¼Ó¼º

class ¿¤¸®¸ÕÆ® ³»¿¡ Æ÷ÇÔµÈ °¢°¢ÀÇ ¿¤¸®¸ÕÆ®¿¡ ´ëÇØ »ìÆìº¸ÀÚ. id´Â ÆÛ½Ã½ºÅÏÆ® °´Ã¼µéÀ» ±¸ºÐÇϱâ À§ÇØ »ç¿ëµÇ´Â ÇÁ¶óÀ̸Ӹ® Ű¿Í °°Àº Ư¼ö ¼Ó¼ºÀÌ´Ù. generator´Â ÆÛ½Ã½ºÅϽº Ŭ·¡½ºÀÇ ÄÚµå »ý¼º ¹æ¹ýÀ» °áÁ¤Áþ´Â ¼Ó¼ºÀÌ´Ù. increment, identity, sequence, hilo, seqhilo, uuid.hex, uuid.string, native, assigned, foreignÀÇ 10°¡Áö ¾Ë°í¸®ÁòÀÌ Á¦°øµÇ´Âµ¥ ¿¹Á¦¿¡¼­´Â DB¿¡ Á¾¼ÓÀûÀÎ native ¹æ½ÄÀ» äÅÃÇß´Ù.

property´Â ID°¡ ¾Æ´Ñ ÀÏ¹Ý ¼Ó¼ºÀ» Á¤ÀÇÇÑ´Ù. µÚ¿¡¼­ »ý¼º½Ãų POJO¿¡´Â °¢ ¼Ó¼ºº°·Î ÇÑ ½ÖÀÇ getter/setter°¡ ÀÚµ¿À¸·Î »ý¼ºµÈ´Ù. ¼Ó¼º¿¡´Â Ä÷³ÀÇ ±æÀÌ, ŸÀÔ Á¤º¸, ³Î(null) °ªÀÇ »ç¿ë °¡´É À¯¹« µîÀ» ±â¼úÇÒ ¼ö ÀÖ´Ù. id¿Í property¿¡¼­ ¼³Á¤Çϴ ŸÀÔÀº ÇÏÀ̹ö³×ÀÌÆ®ÀÇ Å¸ÀÔ Áö¿øÀ» Âü°íÇϱ⠹ٶõ´Ù. ¾Õ¿¡¼­ ±â¼úÇÑ Å¸ÀÔµéÀº ¸ðµÎ ÇÏÀ̹ö³×ÀÌÆ®¿¡¼­ ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â ±âº» ŸÀÔÀÌ´Ù.

°¢ ÆÛ½Ã½ºÅϽº °´Ã¼µé°£ÀÇ °ü°è ¼³Á¤¿¡´Â one-to-many, many-to-one°ú °°Àº ¿¤·¯¸ÕÆ®°¡ »ç¿ëµÈ´Ù. ´ÙÀ½ÀÇ ÄÚµå´Â ¼³Á¤ ÆÄÀÏ¿¡¼­ °ü°è ¼³Á¤ ºÎºÐ¸¸À» µû·Î ¶¼¾î³½ °ÍÀÌ´Ù.

Blog.hbm.xml
<list name="items" inverse="false" lazy="true" order-by="DATE_TIME" cascade="all">
      <key column="BLOG_ID"/>
      <one-to-many class="vssh.model.BlogItem"/>
</list>
BlogItem.hbm.xml
<many-to-one name="blog"  class="vssh.model.Blog"
column="BLOG_ID" not-null="true"/>

mapping ÆÄÀÏ·Î »ý¼ºµÈ Blog Ŭ·¡½º¿¡´Â ´ÙÀ½°ú °°Àº Äڵ尡 Æ÷ÇԵȴÙ.

private Set items;

list ¿¤¸®¸ÕÆ®ÀÇ À§Ä¡¿¡´Â <set>, <list>, <map>, <bag>, <array>¿Í <primitive-array>°¡ ¿À´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¿Ü·¡ Ű(Foreign Key)°¡ Á¤ÀǵǸç ۸¦ Áß½ÉÀ¸·Î 1:1, 1:M , N:M µîÀÇ ¿¬°áÀÌ Ä÷º¼Ç API¸¦ ÅëÇØ Ç¥ÇöµÇ´Â °ÍÀÌ´Ù. À§ÀÇ ¿¹¸¦ º¸¸é Áï items¶ó´Â À̸§À» °¡Áø Set Ä÷º¼ÇÀÌ BlogItemÀÇ ÁýÇÕÀ» ´ã°í ÀÖÀ¸¸ç, °¢ BlogItemÀº BLOG_ID Ä÷³À» ¿Ü·¡ Ű·Î »ç¿ëÇØ¼­ ÀÚ½ÅÀÌ ¼Ò¼ÓµÈ Blog¸¦ ÂüÁ¶ÇÏ°Ô µÇ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

list ¿¤¸®¸ÕÆ®¿¡´Â lazy¶õ ¼Ó¼ºÀÌ Àִµ¥ ±âº» °ªÀº falseÀÌ´Ù. lazy ¼Ó¼ºÀ» true·Î ±¸¼ºÇÏ°Ô µÇ¸é Blog¸¦ ±¸¼ºÇÒ ¶§ BlogItemÀÇ Á¤º¸¸¦ Ä÷º¼Ç¿¡ ´ãÁö ¾Ê´Â´Ù. Áï, ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ BlogItemÀÇ Á¤º¸°¡ ÇÊ¿äÇÒ ¶§±îÁö µ¥ÀÌÅͺ£À̽º¿¡¼­ °ªÀ» °¡Á®¿Í¼­ Ä÷º¼Ç¿¡ ´ã´Â ÇàÀ§¸¦ ´ÊÃãÀ¸·Î½á °á°úÀûÀ¸·Î ¼º´ÉÀ» Çâ»ó½ÃŰ´Â È¿°ú¸¦ ¾ò°Ô µÈ´Ù. inverse ¼Ó¼ºÀº µÎ °´Ã¼(Blog, BlogItem) °£ÀÇ °ü°è¿¡¼­ ¾ç¹æÇ⼺À» ³ªÅ¸³½´Ù.

2´Ü°è. Ant¸¦ ÀÌ¿ëÇÑ POJO ÀÇ »ý¼º
ÇÏÀ̹ö³×ÀÌÆ® ¸ÊÇÎ ÆÄÀÏÀÇ ÀÛ¼ºÀÌ ³¡³ª¸é ÇÏÀ̹ö³×ÀÌÆ®ÀÇ Hbm2Java ±â´ÉÀ» ÀÌ¿ëÇØ¼­ POJO °´Ã¼¸¦ ÀÚµ¿ »ý¼ºÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ Ant ½ºÅ©¸³Æ®¿¡¼­ hbm2java·Î Á¤ÀÇµÈ Å½ºÅ©¸¦ ÀÌ¿ëÇØ¼­ ¼³Á¤µÈ codegenÀ̶ó´Â Ÿ°ÙÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

build.xml
<taskdef name="hbm2java" classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
    classpathref="project.class.path"/>
<!-- hbm to java code codegenarator !!! -->
<target name="codegen">
    <hbm2java output="${src.dir}">
        <fileset dir="${src.dir}">
            <include name="**/*.hbm.xml"/>
        </fileset>
    </hbm2java>
</target>

»ý¼ºµÈ POJOÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥Àº <±×¸² 4>¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Ù.


<±×¸² 4> Hbm2JavaTask[Hibernate extentions] class¸¦ ÀÌ¿ëÇØ »ý¼ºµÈ POJO ÆÄÀÏ

3´Ü°è. Ant¸¦ ÀÌ¿ëÇÑ DB ½ºÅ°¸¶ »ý¼º
ÀÌÁ¦ SchemaExportTask ±â´ÉÀ» ÀÌ¿ëÇØ¼­ DB ½ºÅ°¸¶¸¦ ÀÚµ¿ »ý¼ºÇØ º¸µµ·Ï ÇÏÀÚ. ´ÙÀ½ÀÇ Ant ½ºÅ©¸³Æ®¿¡¼­ schemaexport¶õ À̸§ÀÇ Å½ºÅ©¸¦ Á¤ÀÇÇØ¼­ schame¶õ À̸§ÀÇ Å¸°Ù¿¡¼­ ÀÌ¿ëÇϰí ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ¿¹Á¦¿¡¼­´Â hbm.xml ÆÄÀÏÀ» Á÷Á¢ »ç¿ëÇÏÁö ¾Ê°í, filesetÀ» ÁÖ¼®À¸·Î ¸·¾Æ hibernate.cfg.xml¸¦ ¼³Á¤ ÆÄÀÏ·Î »ç¿ëÇß´Ù. »ý¼ºµÈ ½ºÅ°¸¶ »ý¼º ½ºÅ©¸³Æ®´Â schema-export.sql ÆÄÀÏ¿¡¼­ È®ÀÎ °¡´ÉÇÏ´Ù.

build.xml
<target name="schema">
    <taskdef name="schemaexport"
        classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask"
      classpathref="project.class.path"/>
    <schemaexport drop="no" text="no" output="schema-export.sql"
        config="${build.dir}/hibernate.cfg.xml">
        <!--
        <fileset dir="${build.dir}">
               <include name="**/*.hbm.xml"/>
           </fileset>-->
    </schemaexport>
</target>

¼³Á¤ ÆÄÀÏ·Î »ç¿ëµÈ hibernate.cfg.xml ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù. HSQLDB ¿¬°áÀ» À§ÇÑ ±âº» ¼³Á¤°ú ¼º´É °ü·Ã ¿¤¸®¸ÕÆ®, ±×¸®°í ¸ÊÇÎ ÆÄÀÏ Á¤º¸¸¦ ´ã°í ÀÖ´Ù.

hibernate.cfg.xml
...DTD »ý·« ...
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">
org.hsqldb.jdbcDriver
</property>
    <property name="hibernate.connection.url">
jdbc:hsqldb:data/hibernateblog
</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password"></property>
    <property name="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</property>
    <property name="show_sql">true</property>
    <property name="transaction.factory_class">
         net.sf.hibernate.transaction.JDBCTransactionFactory
    </property>
    <!--¼º´É°ü·Ã element  ÀÌÇÏ property 3°³-->
<property name="hibernate.cglib.use_reflection_optimizer">false</property>
<property name="hibernate.cache.provider_class">
        net.sf.ehcache.hibernate.Provider
</property>
    <mapping resource="vssh/model/BlogItem.hbm.xml"/>
    <mapping resource="vssh/model/Blog.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

¾Õ¿¡¼­ º¸¸é property ¿¤¸®¸ÕÆ®¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅͺ£À̽º ¿¬°á Á¤º¸¸¦ Á÷Á¢ ¼³Á¤Çϰí ÀÖ´Ù. ¹°·Ð À̰ÍÀº Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÒ °æ¿ì ±×¿¡ ´ëÇÑ JNDI À̸§À¸·Î ´ëüµÉ ¼ö ÀÖ´Ù. hibernate.dialect ºÎºÐ¿¡´Â µ¥ÀÌÅͺ£À̽ºº°·Î °íÀ¯ÀÇ Å¬·¡½º¸¦ Àû´çÈ÷ ÀÔ·ÂÇØ Áà¾ß ÇÑ´Ù. ÇÏÀ̹ö³×ÀÌÆ®°¡ Áö¿øÇÏ´Â ¼ö¸¹Àº µ¥ÀÌÅͺ£À̽ºº°·Î °¢°¢ÀÇ dialect °ªÀÌ ¹Ì¸® °áÁ¤µÇ¾î ÀÖ´Ù.

ÇÏÀ̹ö³×ÀÌÆ®´Â ÀÌ dialect¸¦ ÅëÇØ HQL(Hibernate Qurery Language)À» °¢ º¥´õº° SQL ¹®À¸·Î º¯È¯½ÃŲ´Ù. °¢ µ¥ÀÌÅͺ£À̽ºº° dialect Á¤º¸´Â ¿©±â¸¦ Âü°íÇϱ⠹ٶõ´Ù. Property Áß¿¡¼­ show_sqlÀÌ true·Î ¼³Á¤µÇ¸é, ÄܼÖâ¿¡ °¢ º¥´õº°·Î ÇÏÀ̹ö³×ÀÌÆ® Dialect¿¡ ÀÇÇØ º¯ÇüµÈ SQL ¹®À» Ãâ·ÂÇÏ°Ô µÈ´Ù. ±× ¾Æ·¡¿¡ ÀÖ´Â transaction.factory_class´Â ÇÏÀ̹ö³×ÀÌÆ®¿¡¼­ ÀÚ¹Ù °¡»ó¸Ó½Å ¼öÁØÀÇ Ä³½Ã¸¦ »ç¿ëÇϱâ À§ÇØ °¢ WAS º¥´õ º°·Î ±¸ÇöµÇ¾î ÀÖ´Ù.

¾ÕÀÇ Blog.hbm.xml, BlogItem.hbm.xml, hibernate.cfg.xmlÀÇ ¼º´É °ü·Ã element¶ó°í ÁÖ¼®À¸·Î Ç¥±âµÈ ºÎºÐÀ» º¸±â ¹Ù¶õ´Ù.

hibernate.cfg.xml
<hibernate-configuration>
<!--¼º´É°ü·Ã element  ÀÌÇÏ property 3°³-->
<property name="hibernate.cglib.use_reflection_optimizer">false</property><!-(1)-->
<property name="hibernate.cache.provider_class"><!-(2)-->
        net.sf.ehcache.hibernate.Provider
</property>
</hibernate-configuration>

(1)Àº CGLIBÀÇ ¸®Ç÷º¼Ç ¿ÉƼ¸¶ÀÌÀúÀÇ »ç¿ë À¯¹«¸¦ °áÁ¤Áþ´Â °ÍÀÌ´Ù. ¸®Ç÷º¼ÇÀ» ÀÌ¿ëÇÏ°Ô µÇ¸é µð¹ö±ë µî¿¡ À¯¸® ÇÒ ¼öµµ ÀÖÀ¸³ª, À̸¦ ¾²Áö ¾Ê´Â °ÍÀÌ ¼º´É¿¡ µµ¿òÀÌ µÈ´Ù.

(2)´Â cache provider¸¦ ¼³Á¤ÇÏ´Â °÷À¸·Î ÇÏÀ̹ö³×ÀÌÆ®ÀÇ °æ¿ì Ç÷¯±×ÀÎ ÇüÅ·ΠÁ¸ÀçÇÑ´Ù. ¼³Á¤µÈ EHCache°¡ ±âº» °ªÀε¥ ÀÌ ¹Û¿¡µµ Hashtable, OSCache, SwarmCache, JBoss TreeCache µîÀÌ ÀÖÀ¸¸ç °¢°¢ÀÇ Ä³½Ã¸¦ ¾²±â À§Çؼ­´Â Provider class¸¦ ±â¼úÇØ¾ß ÇÑ´Ù. ¶Ç EHCacheÀÇ °æ¿ì classpath°¡ ÀâÈù °÷¿¡ ´ÙÀ½°ú °°ÀÌ ehcache.xml¸¦ ÀÛ¼ºÇØ Áà¾ß ÇÑ´Ù.

ehcache.xml ÆÄÀÏÀÇ ·çÆ® ¿¤¸®¸ÕÆ®´Â enhance·Î defaultCache¿Í cache¸¦ ¼­ºê ¿¤¸®¸ÕÆ®·Î °®°í ÀÖ´Ù. ´ÙÀ½ÀÇ °æ¿ì defaultCache¸¦ ÅëÇØ ¸ðµç ÆÛ½Ã½ºÅϽº °´Ã¼¿¡ ´ëÇØ Àû¿ëÇÒ Ä³½Ã ·êÀ» Á¤ÀÇÇϰí, vssh.model.Blog Ŭ·¡½º¿¡ ´ëÇØ¼­´Â ´Ù¸¥ ij½Ã ¼³Á¤À» ÇØµÎ¾ú´Ù. ij½ÃÀÇ »ç¿ë ¿É¼ÇÀº hbm.xml ÆÄÀÏ¿¡¼­ Á¤ÀÇÇÏ°Ô µÈ´Ù. Áö±Ý±îÁö ÀÛ¼ºµÈ ¿¹Á¦´Â ij½ÃÀÇ »ç¿ë ¿É¼Ç Áß read-write¸¦ »ç¿ëÇß´Ù. ±× ¹ÛÀÇ ¿É¼ÇÀ¸·Î´Â transactional, nonstrict-read-write, read-only°¡ ÀÖ´Ù. ÇÏÀ̹ö³×ÀÌÆ® ¼º´É Çâ»ó ±â¹ý, Second Level Cache¸¦ ÀÌ¿ëÇÑ ÇÏÀ̹ö³×ÀÌÆ® ¼º´É Çâ»ó ¸µÅ©¸¦ ÂüÁ¶Çϵµ·Ï Ç϶ó.

ehcache.xml
<ehcache>
  <defaultCache maxElementsInMemory="10000" eternal="false"
      timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
        />
  <!-- for vssh.model.Blog -->
  <cache name="vssh.model.Blog" maxElementsInMemory="10000" eternal="false"
      timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"
      />        
</ehcache>

hibernate.cfg.xml ÆÄÀÏÀº Ŭ·¡½ºÆÐ½º°¡ ÀâÈù °÷¿¡ µÎ¸é µÈ´Ù. ±×¸®°í log4j¸¦ »ç¿ëÇÒ °æ¿ì, log4j.xml ¶ÇÇÑ °°Àº À§Ä¡¿¡ µÎ¸é ±âº»ÀûÀ¸·Î »ç¿ëÀÌ °¡´ÉÇÏ´Ù. Log4j°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é ÇÏÀ̹ö³×ÀÌÆ®´Â °æ°í ¸Þ½ÃÁö¸¦ °è¼ÓÇØ¼­ º¸¿©Áֱ⠶§¹®¿¡, log4j´Â ²À ¼³Á¤Çؼ­ ÇÏÀ̹ö³×ÀÌÆ®¿Í ÇÔ²² »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. À§ÀÇ ³»¿ëÀ» ÀÌŬ¸³½º¿Í °ü·Ã Ç÷¯±×ÀÎ, xDoclet µîÀ» ÀÌ¿ëÇØ¼­ ó¸®ÇÏ´Â °úÁ¤Àº VSSH Æ÷·³¿¡ ÀÚ¼¼È÷ ±â·ÏÇØ µÎ¾ú´Ù. ÅøÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ °ü½ÉÀÌ ÀÖ´Â ºÐÀº Æ÷·³À» ÀÌ¿ëÇϽñ⠹ٶõ´Ù. eclipse.new21.org¿¡¼­µµ °ü·Ã Á¤º¸¸¦ ã¾Æº¼ ¼ö ÀÖ´Ù.

4´Ü°è. ÇÏÀ̹ö³×ÀÌÆ®·Î µ¥ÀÌÅͺ£À̽º °ª °¡Á®¿À±â
ÀÌÁ¦ ¸¶Áö¸·À¸·Î ÇÏÀ̹ö³×ÀÌÆ®¸¦ ÀÌ¿ëÇØ µ¥ÀÌÅͺ£À̽º¿¡ ±â·ÏµÈ °ªÀ» °¡Á®¿Í º¸ÀÚ. µ¥ÀÌÅͺ£À̽º Á¶ÀÛÀ» À§ÇØ »ç¿ëÇÏ´Â ÇÙ½É Å¬·¡½º´Â SessionFactoryÀÌ´Ù. SessionFactory´Â hibernate.cfg.xml¿¡¼­ ¼³Á¤µÈ ÇϳªÀÇ µ¥ÀÌÅͺ£À̽º¿Í ¿¬°áÀ» ÇÏ°Ô µÈ´Ù. À¥À¸·Î Æ÷ÆÃÇÏ´Â °æ¿ì, SessionFactory´Â À¥ ÄÁÅ×À̳ʰ¡ ½ÃÀÛµÉ ¶§ Çѹø¸¸ ±âµ¿µÇ¸ç À̶§ ¸ðµç Á¤º¸°¡ ·ÎµåµÈ´Ù. ¸¸ÀÏ ¿©·¯ Á¾·ùÀÇ µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÀ» ÇϰíÀÚ ÇÑ´Ù¸é hibernate.cfg.xml¿¡ ¿¬°áÇϰíÀÚ ÇÏ´Â µ¥ÀÌÅͺ£À̽ºÀÇ ¼ö¸¸Å­ SessionFactory¸¦ ±â¼úÇØ¾ß ÇÒ °ÍÀÌ´Ù.

BlogMain.java
private SessionFactory sessionFactory;
public void configure() throws HibernateException {
sessionFactory = new Configuration().configure()
.buildSessionFactory();
}
public Blog getBlogAndAllItems(Long blogid) throws HibernateException {
    Session session = sessionFactory.openSession();
    Transaction tx = null;
    Blog blog = null;
    try {
        tx = session.beginTransaction();
        // (1) HQLÀ» ¹Ù·Î »ç¿ëÇϱâ
        Query q = session.createQuery("from Blog as blog "
                + "left outer join fetch blog.items "
                + "where blog.id = :blogid");
        // (2) À̸§À¸·Î Äõ¸® Á¤º¸ °¡Á®¿À±â
        //Query q = session.getNamedQuery("model.Blog");

        q.setParameter("blogid", blogid);
        blog = (Blog) q.list().get(0);
        tx.commit();
    } catch (HibernateException he) {
        if (tx != null) tx.rollback();
        throw he;
    } finally {
        session.close();
    }
    return blog;
}
...<Áß·«>...

¾ÕÀÇ ¿¹Á¦´Â BlogMain Ŭ·¡½º·Î SessionFactory¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. SessionÀ» ÀÌ¿ëÇÏ´Â °úÁ¤ÀÌ JDBC¿¡¼­ connectionÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ý°ú À¯»çÇÔÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ±×¸®°í TransactionÀº sessionÀ» ÅëÇØ °¡Á®¿À´Âµ¥, begin ¹× commit, rollbackÇÏ´Â °úÁ¤ ¿ª½Ã À¯»çÇÑ °ÍÀ» º¼ ¼ö ÀÖ´Ù.

¾ÕÀÇ ¿¹Á¦¿¡¼­ ÁÖ¸ñÇÒ °÷Àº (1)¿¡ ÁÖ¼® ó¸®µÈ HQLÀÇ »ç¿ëÀÌ´Ù. Âü°í·Î Äõ¸® ÀÚü¸¦ *.hbm.xml ¾È¿¡ ÀÔ·ÂÇØµÎ°í, À̸§À¸·Î Äõ¸® Á¤º¸¸¦ °¡Á®¿À´Â ¹æ½Äµµ Àû¿ë °¡´ÉÇÏ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦´Â Äõ¸® Á¤º¸¸¦ XML ¹®¼­¿¡ ÀÔ·ÂÇÑ »ùÇà ÄÚµåÀÌ´Ù. Äõ¸® Á¤º¸¸¦ XML ¹®¼­¿¡ ÀÔ·ÂÇÏ´Â ¹æ½Ä(Named SQL Query)À» ÀÌ¿ëÇÒ °æ¿ì (2)¿Í °°Àº ÄÚµùÀÌ °¡´ÉÇÏ´Ù.

Blog.hbm.xml
... DTD »ý·« ...
<hibernate-mapping package="vssh.model">
  <class name="Blog" table="BLOG lazy="true">
   ...Áß·«...
  </class>                      
  <query name="model.Blog">      
    <![CDATA[                  
      from Blog as blog left outerin fetch blog.items where blog.id = :blogid
    ]]>                        
  </query>                       
</hibernate-mapping>

ÇÏÀ̹ö³×ÀÌÆ®¿¡¼­ »ç¿ëÇÏ´Â HQLÀº EJB QL°ú ¸¶Âù°¡Áö·Î °´Ã¼ÁöÇâÀûÀÎ ¼º°ÝÀ» °¡Áø´Ù. HQLÀº ¾Õ¿¡¼­ ¼³Á¤ÇÑ Dialect¿¡ ÀÇÇØ °¢ º¥´õº°·Î ÃÖÀûÈ­µÈ SQL ¹®À¸·Î ÀÚµ¿ º¯È¯µÈ´Ù.

HQL°ú Dialect¿¡ ÀÇÇØ º¯ÇüµÈ SQL  
HQL
from Blog as blog
left outer join fetch blog.items
where blog.id = 1

¾ÕÀÇ HQLÀº hiber8ide¸¦ ÅëÇØ °ªÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

                  HQLÀÌ hibernate.dialect¸¦ ÅëÇØ °¢ º¥´õ¿¡ ¸Â´Â SQL·Î º¯È¯


HSQLÀÇ SQL
select blog0_.BLOG_ID as BLOG_ID0_,
  items1_.BLOG_ITEM_ID as BLOG_ITE1_1_,
  blog0_.NAME as NAME0_,
  items1_.TITLE as TITLE1_,
  items1_.TEXT as TEXT1_,
  items1_.DATE_TIME as DATE_TIME1_,
  items1_.BLOG_ID as BLOG_ID1_
from BLOGS blog0_ left outer join BLOG_ITEMS items1_ on blog0_.BLOG_ID=items1_.BLOG_ID
where (blog0_.BLOG_ID=1 )

¾ÕÀÇ HSQL Databse Manager¸¦ ÅëÇØ SQLÀ» È®ÀÎÇØ º¼ ¼ö ÀÖ´Ù. ÀÌŬ¸³½ºÀÇ ÇÏÀ̹ö³×ÀÌÆ® Ç÷¯±×ÀÎÀÎ Hiber8IDE¸¦ »ç¿ëÇϸé HQL °á°ú¸¦ º¸´Â °ÍÀÌ °¡´ÉÇϰí, JOI(Java Object Inspector)¶ó´Â ÅøÀ» ÀÌ¿ëÇϸé Ä÷º¼ÇÀÇ ³»ºÎµµ È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ °÷À» Âü°íÇϵµ·Ï Ç϶ó.

<±×¸² 5> Hibern8IDE¿Í JOI

À̰ÍÀ¸·Î ÇÏÀ̹ö³×ÀÌÆ®¿¡ ´ëÇÑ ¼Ò°³¸¦ ¸¶Ä¡µµ·Ï ÇϰڴÙ. ÇÏÀ̹ö³×ÀÌÆ®´Â °ü·Ã ÀÚ·á°¡ ºñ±³Àû dzºÎÇϱ⠶§¹®¿¡, ÀÚ¼¼ÇÑ ³»¿ëÀº Âü°íÀڷḦ ÅëÇØ ½º½º·Î ÀÍÇô³ª°¡±æ ¹Ù¶õ´Ù.

½ºÇÁ¸µ°ú ÇÏÀ̹ö³×ÀÌÆ® ¿¬µ¿Çϱâ
ÀÌÁ¦ Áö³­ ±Û¿¡¼­ ¼Ò°³ÇÑ °í°´ µî·Ï ¿¹Á¦¸¦ ÅëÇØ ½ºÇÁ¸µ°ú ÇÏÀ̹ö³×ÀÌÆ®°¡ ¾î¶»°Ô ¿¬µ¿µÇ´ÂÁö¿¡ ´ëÇØ »ìÆìº¸µµ·Ï ÇÏÀÚ. °í°´ µî·Ï ¿¹Á¦´Â ½ºÇÁ¸µ »ç¿ë ½Ã³ª¸®¿À Áß¿¡¼­ ½áµåÆÄƼ WAF¿Í OR ¸ÊÇÎ µµ±¸¸¦ ¿¬°èÇÑ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ÇüÅÂÀÌ´Ù.

¿¹Á¦´Â ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ°ú Á¦¾î °èÃþÀ» Æ÷ÇÔÇÏ´Â À¥ °èÃþÀÇ Ã³¸®¸¦ À§ÇØ ½ºÆ®·µÃ÷¸¦ »ç¿ëÇϰí ÀÖÀ¸¸ç, OR ¸ÊÇÎ µµ±¸·Î ÇÏÀ̹ö³×ÀÌÆ®¸¦ äÅÃÇØ¼­ ÆÛ½Ã½ºÅϽº °èÃþÀ» ´ã´çÇϵµ·Ï Çϰí ÀÖ´Ù. ½ºÆ®·µÃ÷¿Í ÇÏÀ̹ö³×ÀÌÆ®¸¦ ¿¬°áÇÏ´Â À§Ä¡¿¡¼­ ¾ÖÇø®ÄÉÀÌ¼Ç ·ÎÁ÷À» ü°èÀûÀ¸·Î °ü¸®Çϱâ À§ÇØ ½ºÇÁ¸µÀÌ »ç¿ëµÇ´Â °ÍÀÌ´Ù.

<±×¸² 6> ½áµåÆÄƼ WAF¿Í ORMÀ» ¿¬°èÇÑ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ±¸Á¶ÀÇ ½ºÇÁ¸µ »ç¿ë ½Ã³ª¸®¿À

¿¹Á¦¿¡ ´ëÇÑ ±âº» ¼³¸í°ú ½ºÆ®·µÃ÷ ¿¬µ¿ ºÎºÐÀº Áö³­ ±Û¿¡¼­ ´Ù·ðÀ¸¹Ç·Î ¿©±â¼­´Â Á¶±Ý ´õ »ó¼¼ÇÏ°Ô ÀüüÀûÀÎ °üÁ¡¿¡¼­ »ìÆìº¸µµ·Ï ÇÏÀÚ.

UML ´ÙÀ̾î±×·¥À¸·Î »ìÆìº¸´Â °í°´ µî·Ï ¿¹Á¦
¿ì¼± <±×¸² 7>¿¡ ¼Ò°³µÈ ÆÐŰÁö ´ÙÀ̾î±×·¥À» ÁÖ¸ñÇØ Áֱ⠹ٶõ´Ù.

<±×¸² 7> °í°´ µî·Ï ¿¹Á¦ÀÇ ÆÐŰÁö ´ÙÀ̾î±×·¥

°í°´ µî·Ï ¿¹Á¦´Â ±âº»ÀûÀ¸·Î 4°³ÀÇ ÆÐŰÁö°¡ ÁÖÃàÀ» ÀÌ·é´Ù. Model ÆÐŰÁö¿¡´Â ÇÏÀ̹ö³×ÀÌÆ®¿¡¼­ OR ¸ÊÇÎ Á¤º¸¸¦ ±â·ÏÇÏ´Â µ¥ »ç¿ëµÇ´Â hbm.xml ÆÄÀϰú hbm2java ŽºÅ©¸¦ ÀÌ¿ëÇØ¼­ »ý¼ºµÈ ¸ðµ¨¿ë Ŭ·¡½º¸¦ Æ÷ÇÔÇÑ´Ù. DAO ÆÐŰÁö¿¡´Â ÇÏÀ̹ö³×ÀÌÆ®¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅÍ Ã³¸®¸¦ ¼öÇàÇÒ ÀÎÅÍÆäÀ̽º¿Í ±× ±¸Çö °´Ã¼°¡ Æ÷ÇԵǾî ÀÖ´Ù.

Business ÆÐŰÁö¿¡´Â DAO °´Ã¼¸¦ ÀÌ¿ëÇØ¼­ ÇÊ¿äÇÑ ºñÁî´Ï½º ·ÎÁ÷À» ¼öÇàÇÏ´Â ºñÁî´Ï½º µ¨¸®°ÔÀÌÆ®°¡ Æ÷ÇԵǾî ÀÖÀ¸¸ç, ±× °á°ú´Â Model ÆÐŰÁö¿¡¼­ Á¤ÀÇµÈ ¸ðµ¨À» ÅëÇØ Àü´ÞµÈ´Ù. Control ÆÐŰÁö¿¡´Â ½ºÆ®·µÃ÷ÀÇ ¾×¼Ç Ŭ·¡½º°¡ Á¤ÀǵǾî ÀÖÀ¸¸ç, Business ÆÐŰÁö¿¡¼­ Á¤ÀÇµÈ µ¨¸®°ÔÀÌÆ® °´Ã¼¸¦ ÀÌ¿ëÇØ¼­ »ç¿ëÀÚ ¿äûÀ» ó¸®ÇÑ´Ù.

°¢ ÆÐŰÁö¿¡ Æ÷ÇÔµÈ ÁÖ¿ä Ŭ·¡½ºµéÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥Àº <±×¸² 8>¿¡ Á¤¸®µÇ¾î ÀÖ´Ù.

<±×¸² 8> °í°´ µî·Ï ¿¹Á¦ÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥

<±×¸² 9>´Â »ç¿ëÀÚ°¡ °í°´ ¸®½ºÆ®¸¦ ¿äûÇßÀ» ¶§ 󸮵Ǵ °úÁ¤À» ½ÃÄö½º ´ÙÀ̾î±×·¥À¸·Î Ç¥ÇöÇÑ °ÍÀÌ´Ù.

<±×¸² 9> °í°´ ¸®½ºÆ®¸¦ ¿äûÇßÀ» °æ¿ìÀÇ ½ÃÄö½º ´ÙÀ̾î±×·¥

hibernate.cfg.xml¸¦ ´ëüÇÏ´Â ½ºÇÁ¸µÀÇ applicationContext.xml
ÇÏÀ̹ö³×ÀÌÆ®¸¸À» »ç¿ëÇÏ´Â ºí·Î±× ¿¹Á¦¿¡¼­ hibernate.cfg.xmlÀ» ÀÌ¿ëÇØ¼­ µ¥ÀÌÅͺ£À̽º ¿¬°á Á¤º¸¿Í OR ¸ÊÇÎ Á¤º¸µéÀ» ¼³Á¤ÇØ ÁØ °ÍÀ» ±â¾ïÇÒ °ÍÀÌ´Ù. ½ºÇÁ¸µ°ú ÇÏÀ̹ö³×ÀÌÆ®¸¦ ÅëÇÕÇØ¼­ »ç¿ëÇÒ ¶§´Â hibernate.cfg.xmlÀ» ÀÛ¼ºÇÒ Çʿ䰡 ¾ø´Ù. ½ºÇÁ¸µÀÇ ±âº» ¼³Á¤ ÆÄÀÏÀÎ applicationContext.xml¿¡ ºó(bean) ¼³Á¤À» ÅëÇØ ÇØ°áÇϱ⠶§¹®ÀÌ´Ù. ´ÙÀ½ÀÇ ÄÚµå´Â DataSource¿Í SessionFactory¸¦ IoC ÀûÀΠƯ¡À» °®´Â ½ºÇÁ¸µÀÇ ºó ÆÑÅ丮 ¼³Á¤ ¹æ½ÄÀ¸·Î ÇØ°áÇÏ´Â °úÁ¤À» º¸¿©ÁØ´Ù.

applicationContext.xml
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName"><value>org.hsqldb.jdbcDriver</value></property>
   <property name="url"><value>jdbc:hsqldb:data/vsshdb</value></property>
   <property name="username"><value>sa</value></property>
   <property name="password"><value></value></property>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
   <property name="dataSource"><ref local="dataSource"/></property>
   <property name="mappingResources">
      <list>
         <value>model/Customer.hbm.xml</value>
      </list>
   </property>
   <property name="hibernateProperties">
   <props>
      <prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop>
          <!-- http://www.hibernate.org/194.html -->
          <prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
         <prop key="hibernate.hbm2ddl.auto">create</prop> (1)
      </props>
   </property>
</bean>

JDBC µå¶óÀ̹ö¿Í URL, ¾ÆÀ̵ð, ÆÐ½º¿öµå·Î ±¸¼ºµÇ´Â µ¥ÀÌÅÍ ¼Ò½º ¼³Á¤Àº ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÀ̹ö³×ÀÌÆ®ÀÇ ¼¼¼Ç ÆÑÅ丮°¡ ¾î¶»°Ô ½ºÇÁ¸µ¿¡¼­ ¼³Á¤µÇ´ÂÁö¿¡ ´ëÇØ¼­ Á¶±Ý ´õ ÀÚ¼¼È÷ »ìÆìº¸ÀÚ.

ÇÏÀ̹ö³×ÀÌÆ® ¼¼¼Ç ÆÑÅ丮´Â ½ºÇÁ¸µÀÇ ORM ÆÐŰÁö Áß ÇÏÀ̹ö³×ÀÌÆ®¿ÍÀÇ ¿¬µ¿À» À§ÇÑ LocalSessionFactoryBean Ŭ·¡½º¿¡ ÀÇÇØ 󸮵ȴÙ. ÀÌ ºóÀº DataSource, mappingResources, hibernatePropertiesÀÇ 3°¡Áö ¼Ó¼ºÀ» ÇÊ¿ä·Î ÇÑ´Ù. ´Ù¸¥ ¼³Á¤ °ªÀº hibernate.cfg.xml¿¡¼­ º¸¾Ò´ø °ÍÀ̹ǷΠ¼³¸íÀ» »ý·«ÇÑ´Ù. ¼Ò½ºÄÚµå Áß (1)·Î Ç¥±âµÈ ºÎºÐÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛµÉ ¶§ ÀÚµ¿À¸·Î ½ºÅ°¸¶ÀÇ DDL ¹®À» ÀͽºÆ÷Æ®(export)Ç϶ó´Â ¼³Á¤ÀÌ´Ù.

À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ½ºÇÁ¸µÀÇ applicationContext.xmlÀÇ ¼³Á¤À» ¹Ý¿µÇϵµ·Ï ÇÏ·Á¸é web.xml¿¡ ´ÙÀ½°ú °°Àº Ãß°¡ Á¤º¸¸¦ ÀÔ·ÂÇÏ¸é µÈ´Ù.

web.xml
<context-param>
  <param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext1.xml,applicationContext2.xml
</param-value>
</context-param>

¸¸ÀÏ ¿¹Á¦¿Í °°ÀÌ ½ºÆ®·µÃ÷¿Í ½ºÇÁ¸µÀ» ÇÔ²² »ç¿ëÇÏ´Â °æ¿ì¶ó¸é ½ºÆ®·µÃ÷ÀÇ ±âº» ¼³Á¤ ÆÄÀÏÀÎ struts-config.xml¿¡ ContextLoaderPlugInÀ» ÀÌ¿ëÇØ ´ÙÀ½°ú °°Àº Ç÷¯±×ÀÎ ¼³Á¤À» Ãß°¡·Î ÀÔ·ÂÇÑ´Ù.

struts-config.xml
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation"
        value="/WEB-INF/applicationContext.xml,
               /WEB-INF/action-servlet.xml"/>
</plug-in>


½ºÇÁ¸µ°ú ÇÏÀ̹ö³×ÀÌÆ® ¿¬µ¿À» À§ÇÑ °³¹ß ÆÁ!
1. HibernateTemplateÀ» »ç¿ëÇÏÀÚ
´ÙÀ½ÀÇ ÄÚµå´Â DAO ±¸Çö Áß °í°´ ¸®½ºÆ®¸¦ °¡Á®¿À´Â ºÎºÐÀÌ´Ù. ù ¹øÂ° ÄÚµå´Â ÇÏÀ̹ö³×ÀÌÆ®¸¦ »ç¿ëÇÏ´Â ÀϹÝÀûÀÎ ¹æ½ÄÀ¸·Î ±¸ÇöµÇ¾î ÀÖ´Ù. ¼¼¼Ç ÆÑÅ丮¸¦ ÀÌ¿ëÇØ¼­ ¼¼¼ÇÀ» »ý¼ºÇÑ ´ÙÀ½, »ý¼ºµÈ ¼¼¼ÇÀ» ÀÌ¿ëÇØ¼­ °í°´ ¸®½ºÆ®¸¦ °¡Á®¿À°í ÀÖ´Ù. ó¸® °úÁ¤ Áß¿¡ ¹ß»ýÇÏ´Â ¿¹¿Ü¿¡ ´ëÇÑ Ã³¸®µµ ÀÌ·ç¾îÁö°í ÀÖÀ½À» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

 <¸®½ºÆ® 1> ½ºÇÁ¸µ¿¡¼­ ÇÏÀ̹ö³×ÀÌÆ® ±â´ÉÀ» »ç¿ëÇÏ´Â ±âº»ÀûÀÎ ÄÚµå

½ºÇÁ¸µ¿¡¼­´Â ÀÌ·¯ÇÑ º¹ÀâÇÑ °úÁ¤À» DAO ÆÐÅÏÀ» ÀÌ¿ëÇØ¼­ °¨ÃçÁÖ´Â HibernateTemplate Ŭ·¡½º¸¦ Á¦°øÇÑ´Ù. HibernateTemplateÀ» ÀÌ¿ëÇÏ¸é ´ÙÀ½°ú °°ÀÌ ´Ü ÇÑ ÁÙÀÇ ÄÚµå·Î ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 2> ½ºÇÁ¸µÀÇ HibernateTemplate¸¦ »ç¿ëÇØ¼­ º¹ÀâÇÑ ÄÚµå °¨Ãß±â

2. IoC¿¡ ´ëÇÑ °³³ä ÀÌÇØ¸¦ È®½ÇÈ÷ ÇÏÀÚ
ºñÁî´Ï½º µ¨¸®°ÔÀÌÆ®·Î »ç¿ëµÇ´Â CustomerBizManagerImpl Ŭ·¡½ºÀÇ ¼Ò½ºÄڵ带 »ìÆìº¸¸é, »ç¿ëÇÏ´Â DAO Ŭ·¡½º¿¡ ´ëÇÑ ÀνºÅϽº¸¦ ¸¸µå´Â Äڵ尡 ¾ø´Â °ÍÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ´ë½Å setCustomerDAO()¶ó´Â ¸Þ½îµå¸¦ ±¸ÇöÇϰí ÀÖ´Ù.

CustomerBizManagerImpl.java
public class CustomerBizManagerImpl implements ICustomerBizManager {
private ICustomerDAO dao;
public void setCustomerDAO(ICustomerDAO dao) {
    this.dao = dao;
}    
  ...»ý·«...

½ºÇÁ¸µ¿¡¼­ °¢ Ŭ·¡½º°£ÀÇ ¿¬°ü °ü°è´Â Äڵ忡¼­ Á÷Á¢ µå·¯³ª´Â °Ô ¾Æ´Ï¶ó, applicationContext.xml¿¡¼­ ±â·ÏµÈ ºó ¼³Á¤À» ÀÌ¿ëÇØ¼­ 󸮵ȴÙ. °¢ Ŭ·¡½º°¡ ÇÊ¿ä·Î ÇÏ´Â ÀνºÅϽº¸¦ ÀÚ½ÅÀÌ Á÷Á¢ °áÁ¤ÇÏ´Â °Ô ¾Æ´Ï¶ó ¼³Á¤ Á¤º¸¿¡ µû¶ó IoC ÄÁÅ×À̳ÊÀÎ ½ºÇÁ¸µ¿¡ ÀÇÇØ °áÁ¤µÇ¾î °¢ Ŭ·¡½º¿¡ ÀÖ´Â setter ¸Þ½îµå¸¦ ÀÌ¿ëÇØ¼­ °Å²Ù·Î ¿¬°áµÇ´Â °Í(Setter Injection)ÀÌ´Ù. ÀÌ·¯ÇÑ Á¦¾îÀÇ ¹ÝÀü(Inversion of Control)ÀÌ ½ºÇÁ¸µ¿¡¼­´Â ´Ã ÀϾ±â ¶§¹®¿¡ Áö³­ ±Û¿¡ ¼Ò°³ÇÑ IoC¿¡ ´ëÇÑ °³³äÀ» È®½ÇÈ÷ ÀÌÇØÇϰí ÀÖ´Â °ÍÀÌ ÁÁ´Ù.

applicationContext.xml
<bean id="customerDAO" class="dao.CustomerDAOImpl">
    <property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>

3. Æ®·£Àè¼Ç ó¸® °úÁ¤À» ÀÚµ¿È­ÇÏÀÚ.
ÆÛ½Ã½ºÅϽº °èÃþÀ» ±¸ÇöÇÏ´Â µ¥ ÀÖ¾î °¡Àå Áß¿äÇÏ°Ô ¿©±â´Â ºÎºÐ Áß Çϳª´Â Æ®·£Àè¼Ç ó¸®ÀÌ´Ù. ½ºÇÁ¸µÀ» ÀÌ¿ëÇÏ¸é ºñÁî´Ï½º µ¨¸®°ÔÀÌÆ®¿¡¼­ ÇÏÀ̹ö³×ÀÌÆ®·Î ±¸ÇöµÈ DAO¸¦ È£ÃâÇÒ ¶§ ¸¶Ä¡ EJB¿¡¼­ CMT(Container Managed Transaction)¸¦ »ç¿ëÇÏ´Â °Íó·³ Æ®·£Àè¼Ç ó¸® °úÁ¤À» ÀÚµ¿È­ÇÒ ¼ö ÀÖ´Ù.

applicationContext.xml
<bean id="customerBizManager"
    class="org.springframework.transaction.interceptor
.TransactionProxyFactoryBean">
    <property name="transactionManager"><ref local="transactionManager"/></property>
    <property name="target"><ref local="customerBizManagerTarget"/></property>
    <property name="transactionAttributes">
        <props>
            <prop key="create*">PROPAGATION_REQUIRED</prop>
        <prop key="update*">PROPAGATION_REQUIRED</prop>
            <prop key="delete*">PROPAGATION_REQUIRED</prop>
            <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
        </props>
    </property>
</bean>    
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
   <property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="customerBizManagerTarget" class="business.CustomerBizManagerImpl">
    <property name="customerDAO"><ref local="customerDAO"/></property>
</bean>    

¾ÕÀÇ ¿¹Á¦¸¦ º¸¸é customerBizManager¶ó´Â id¸¦ °¡Áö´Â ºó¿¡¼­ Æ®·£Àè¼Ç 󸮰¡ ¼³Á¤µÇ¾î ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. customerBizManager ºóÀÇ ±¸Çö Ŭ·¡½º´Â TransactionProxyFactoryBeanÀ¸·Î¼­ ÀÌ Å¬·¡½ºÀÇ API¸¦ ÂüÁ¶Çϸé ÇÊ¿äÇÑ ¼Ó¼º Á¤º¸¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.

transactionManager ¼Ó¼ºÀº ½ºÇÁ¸µÀÇ ORM ÆÐŰÁöÀÇ ÇÏÀ̹ö³×ÀÌÆ® È®Àå ±â´É Áß HibernateTransactionManager¸¦ »ç¿ëÇϰí ÀÖ´Ù. <±×¸² 10>Àº ½ºÇÁ¸µÀÇ Æ®·£Àè¼Ç °ü·Ã Ŭ·¡½ºµéÀ» Á¤¸®ÇÑ °ÍÀÌ´Ù. Æ®·£Àè¼Ç ¸Å´ÏÀú´Â PlaformTransactionManager ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ¼­ºê Ŭ·¡½º Áß Çϳª¸¦ ¼±ÅÃÇØÁÖ¸é µÈ´Ù. ¿¹¸¦ µé¾î JDOÀÇ ¾ÆÆÄÄ¡ ±¸ÇöÀÎ OJB¸¦ OR ¸ÊÇÎ µµ±¸·Î »ç¿ëÇϰí ÀÖ´Ù¸é, JdoTransactionManager¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.

<±×¸² 10> ½ºÇÁ¸µÀÇ Æ®·£Àè¼Ç °ü·Ã Ŭ·¡½ºµé

¼³Á¤µÈ Æ®·£Àè¼Ç ±â´ÉÀÌ »ç¿ëµÉ Ÿ°Ù Ŭ·¡½º´Â business ÆÐŰÁö¿¡ ÀÖ´Â CustomerBizManagerImpl Ŭ·¡½º°¡ ¼³Á¤µÇ¾î ÀÖ´Ù. transactionAttributes ¼Ó¼º¿¡´Â CRUD½Ã¿¡ ÇÊ¿äÇÑ Æ®·£Àè¼Ç 󸮸¦ ´ÙÀ½ °ª Áß Çϳª·Î ¼³Á¤ÇØÁÖ¸é µÈ´Ù. Æ®·£Àè¼Ç ¼Ó¼ºÀº ¸ðµÎ 6°¡Áö ·¹º§À» Áö¿øÇÑ´Ù. Á» ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº ÀÌ °÷¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Ù.

¡ß PROPAGATION_REQUIRED

¡ß PROPAGATION_SUPPORTS

¡ß PROPAGATION_MANDATORY

¡ß PROPAGATION_REQUIRES_NEW

¡ß PROPAGATION_NOT_SUPPORTED

¡ß PROPAGATION_NEVER

¿ÀǼҽº·Î °³¹ß ¹®È­¸¦ ¹Ù²îÀÚ!
À̰ÍÀ¸·Î ¾ÖÇø®ÄÉÀÌ¼Ç °èÃþº°·Î °æÀï·Â ÀÖ´Â ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ©¸¦ ¼±Á¤Çϰí, °¢°¢ÀÇ ÇÁ·¹ÀÓ¿öÅ©ÀÇ ÀåÁ¡À» »ì·Á ¾àÇÑ °áÇÕµµ¸¦ °¡Áö´Â ÅëÇÕ ÇÁ·¹ÀÓ¿öÅ©¸¦ ±¸¼ºÇÏ´Â ¹æ¹ý¿¡ °üÇÑ ¿¬Àç±ÛÀ» ¸¶Ä¡°Ô µÇ¾ú´Ù.

ÀÌ ¿¬Àç´Â ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ¿¡´Â ÅÛÇø´ ¿£ÁøÀÎ º§·Î½ÃƼ¸¦, Á¦¾î °èÃþ¿¡´Â Service to Worker ÆÐÅÏÀÌ ±¸ÇöµÈ ½ºÆ®·µÃ÷¸¦, ¾ÖÇø®ÄÉÀÌ¼Ç ·ÎÁ÷ °èÃþ¿¡´Â AOP(Aspect Oriented Programming)¿Í IoCÀÇ °³³äÀÌ °áÇÕµÈ °æ·®±Þ ÄÁÅ×À̳ÊÀÎ ½ºÇÁ¸µÀ», ÆÛ½Ã½ºÅϽº °èÃþ¿¡´Â OR ¸ÊÇÎ µµ±¸ÀÇ ¼±µÎ ÁÖÀÚÀÎ ÇÏÀ̹ö³×ÀÌÆ®¸¦ ¼±Á¤ÇØ ÁøÇàµÇ¾ú´Ù. ³Ê¹« ¸¹Àº ±â¼úµéÀ» ¼Ò°³ÇÏ´Ùº¸´Ï ¾î¿ ¼ö ¾øÀÌ °¢ ÇÁ·¹ÀÓ¿öÅ©°£ÀÇ °áÇÕ¿¡ ´ëÇØ Á¶±Ý ´õ ±íÀÌ ÀÖ´Â ¼³¸íÀ» µå¸®Áö ¸øÇÑ Á¡ÀÌ ¾Æ½¬¿òÀ¸·Î ³²´Â´Ù.

ÇÊÀÚµéÀÌ ¸¸µç VSSH¶ó´Â ¿ë¾î°¡ ¸¶Ä¡ ÇϳªÀÇ Æ®·»µåó·³ ÀÚ¹Ù Ä¿¹Â´ÏƼ¿¡¼­ »ç¿ëµÇ°í ÀÖ´Â °Íµµ ½É½ÉÄ¡ ¾Ê°Ô ¹ß°ßÇÒ ¼ö ÀÖ¾ú´Ù. ±×·² ¶§¸é ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ©ÀÇ È°¿ë¿¡ ´ëÇØ ¸¹Àº ÀÚ¹Ù °³¹ßÀÚµéÀÌ °ü½ÉÀ» °¡Áöµµ·Ï À¯µµÇϰíÀÚ Çß´ø ÃÖ¼ÒÇÑÀÇ ¸ñÀûÀº ´Þ¼ºµÈ °Í °°¾Æ ´ÙÇེ·± ¸¶À½µµ ´À³¤´Ù.

¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 2004³â 10¿ùÈ£¿¡ ½Ç¸° ¡¸WAS ½ÃÀåÀ» µÚÈçµç ¿ÀǼҽºÀÇ µµÀüÀ塹À̶õ ±â»ç¿¡¼­ ´ã´ç ±âÀÚ´Â "Àü ¼¼°èÀûÀ¸·Î ƯÁ¤ º¥´õÀÇ µ¶Á¡ÀûÀÎ Á¦Ç°µéÀÌ ¼ÒÇÁÆ®¿þ¾î ½ÃÀåÀ» Áö¹èÇÏ´Â ÇöÀç »óȲ¿¡¼­ ¿ÀǼҽº´Â ÀÚ±¹ ¼ÒÇÁÆ®¿þ¾î »ê¾÷ÀÇ ÀÚ»ý·ÂÀ» È®º¸Çϱâ À§ÇÑ °ÅÀÇ À¯ÀÏÇÑ ´ë¾ÈÀ̸ç, ±â¼úÀûÀ¸·Î´Â ÀÌ¹Ì ±× °¡´É¼ºÀ» ÀÔÁõÇÑ ´Ü°è¿¡ ¿Ô´Ù°í ÇÒ ¼ö ÀÖ´Ù"°í ¸»Çß´Ù. ÇÊÀÚµéÀº À̹ø ¿¬À縦 ÁøÇàÇϸ鼭 ¿ÀǼҽº°¡ ¿ì¸®³× ±â¼ú ¼öÁØÀ» ÇÑ ´Ü°è Çâ»ó½Ãų »Ó ¾Æ´Ï¶ó ÃæºÐÈ÷ ½Ç¹«¿¡¼­ Ȱ¿ëµÉ ¼ö ÀÖ´Â ¼öÁØ¿¡ µµ´ÞÇßÀ½À» ´À³¥ ¼ö ÀÖ¾ú´Ù.

¿ÀǼҽº¿¡ °üÇÑ ºÎÁ¤Àû Æí°ß°ú °¢ ±â¼úÀ» ¼÷·ÃµÇ°Ô ÀÍÈ÷°í ÀÖ´Â °³¹ßÀÚÀÇ ºÎÁ· ¹®Á¦¸¸ ÇØ°áµÈ´Ù¸é ¿ÀǼҽº¸¦ ÀÌ¿ëÇØ¼­ ¿ì¸®³× °³¹ß ¹®È­¸¦ ȹ±âÀûÀ¸·Î °³¼±ÇÏ´Â °Íµµ °¡´ÉÇÒ °ÍÀÌ´Ù. @

¢º Àüü ¼Ò½º ´Ù¿î·Îµå

* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ ÀÚ¸ÅÁöÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
°ü·Ã±â»ç
·ÕÈ¥ vs. ¿ÀǼҽº ¨ç Â÷¼¼´ë OS, ¾÷°è »çȰ °Ç ¡¸°Ýµ¹ ¿¹»ó¡¹
[³ªÀÇ ¿ÀǼҽº ÇÁ·ÎÁ§Æ® °æÇè±â] Áñ°Å¿òÀ» ³Ñ¾î ÇູÀ̾ú´Ù
¿ÀǼҽº DBÀÇ ±Íȯ¡¸¿äÁöºÎµ¿ DB ºò3 ¿òÁ÷Àϱî?¡¹
[ÇØÄ¿ ÃÖÈÄÀÇ ¾ð¾î, Ä¿¸Õ Lisp] ¨ç ¿Ö ÇØÄ¿ÀÇ ¾ð¾îÀϱî?
[¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ] ¨ç VSSH ÇÁ·¹ÀÓ¿öÅ©
[óÀ½ºÎÅÍ ´Ù½Ã ¹è¿ì´Â ¸®´ª½º] ¨ç ¼³Ä¡¿Í ±âº» ¸í·É¾î
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
[ORM ¨é] iBATIS SQL...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
[ORM ¨è] JPA Ȱ¿ëÇϱâ
[ORM ¨ç] ÇÏÀ̹ö³×ÀÌÆ® Ȱ¿ëÀü...
[±â°í]±ÝÀ¶ ¼­ºñ½º ½ÃÀåÀ» À§ÇÑ ...
[DDD ¨ë] BDD(Behavi...
[±â°í]¿Ã¸²ÇÈ ½ÃÁ𠺸¾È À§Çù¿¡ ...
'±¤¼¶À¯ 3D ¿µ»ó', ³úÀÇÇп¡ »õ ÁöÆò ¿­´Ù [00:02:31]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
Ç÷¹À̽ºÅ×À̼Ç3(PS3) ´ë¿ë·® HDD ±³Ã¼ ½¬¿î ÆÁ [00:03:22]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
¡°À¥ Ç¥ÁØÀº ¹«½¼!¡±¡¦IE8¿¡ ´ë...
Á¶Áßµ¿, ´ÙÀ½¿¡ ´º½º°ø±Þ Áß´Ü¡¦"...
¡®³ªÈ¦·Î ¾×ƼºêX¡¯¡¦¼¼°è ÀÎÅͳݰú...
³×À̹ö´Â ¿Ö '10´ë ÇØÄ¿'¿¡ ´ç...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
°øÀÎÀÎÁõüÁ¦, ¿ì¸®¿¡°Ô ÀÓ¹ÚÇÑ ¹Ì...
Áö¾Öµå, ¿Á¿Ü±¤°í¿Í Ç×°ø»çÁø °áÇÕ...
[Àλç]Áö½Ä°æÁ¦ºÎ
ÆÄ¼ö´åÄÄ "DRMÀÌ º¸¾È»ê¾÷ À̲ö...
³×À̹ö ¼­ºñ½º ÀÚ¹®À§¿øÈ¸, º»°ÝÀû...
Çѱ¹¾ÆÀ̽ǷÐ, ¾¾µð³×Æ®¿÷½º¿¡ ´ë±Ô...
 
 
The Korean edition of 'ZDNet' is published under license from CNET Networks, Inc., San Francisco, CA, USA. Editorial items appearing in 'ZDNet Korea' that were originally published in the US Edition of 'ZDNet', 'CNET', and 'CNET News.com' are the copyright properties of CNET Networks, Inc. or its suppliers.
Copyright ¨Ï 2008 CNET Networks, Inc. All Rights Reserved. 'ZDNet', 'CNET' and 'CNET News.com' are trademarks of CNET Networks, Inc.