diff --git a/reference/ko/README-KO.txt b/reference/ko/README-KO.txt index 7bedf81364..9720826e13 100644 --- a/reference/ko/README-KO.txt +++ b/reference/ko/README-KO.txt @@ -9,28 +9,56 @@ Blog : http://blog.naver.com/jdkim528/ [Down/Config/Build] - cvs Ŭ¶óÀ̾ðÆ®¸¦ °®°í ÀÖ´Ù¸é, - 1)¿¬°á À¯Çü : pserve/extssh Áß Çϳª¸¦ ¼±ÅÃÇÕ´Ï´Ù - 2)»ç¿ëÀÚÀ̸§ : anonymous - 3)È£½ºÆ® : cvs.sourceforge.net - 4)Æ÷Æ® : ±âº»°ª - 5)ÀúÀå¼Ò°æ·Î : /cvsroot/hibernate - 6)¸ðµâ : Hibernate3/doc/reference - À§¿Í °°ÀÌ ¿¬°á Á¤º¸¸¦ ÀÔ·Â ÇϽŠÈÄ REFERENCE Àüü¸¦ ³»·Á¹ÞÀ¸¼Åµµ µÇÁö¸¸, - ÇÑ±Û ¹ø¿ªº»¸¸ ÇÊ¿äÇÏ½Ã´Ù¸é ´ÙÀ½°ú °°ÀÌ Çϼŵµ µË´Ï´Ù. - [°¡]. °øÅë ¸ðµâ ¹Þ±â - À§¿¡¼­ 6)¸ðµâÀ» Hibernate3/doc/reference/support·Î ÁöÁ¤ÇϽðí - ·ÎÄà ÄÄÇ»ÅÍÀÇ µð·ºÅ丮 [·ÎÄà °æ·Î]/reference/ ÇÏ¿¡ ¹Þ½À´Ï´Ù - [³ª]. Çѱۺ» ¸ðµâ ¹Þ±â - À§¿¡¼­ 6)¸ðµâÀ» Hibernate3/doc/reference/ko·Î ÁöÁ¤ÇÏ°í - ·ÎÄà ÄÄÇ»ÅÍÀÇ µð·ºÅ丮 [·ÎÄà °æ·Î]/reference/ ÇÏ¿¡ ¹Þ½À´Ï´Ù. - [´Ù]. ºôµå ÆÄÀÏ ¹Þ±â - ±×·± ´ÙÀ½ /doc/reference/build.xml ÆÄÀÏÀ» ³»·Á ¹ÞÀº ´ÙÀ½ + * ±âÁ¸ÀÇ CVS¿¡¼­ SVNÀ¸·Î ¹Ù²î¸é¼­ ½Å±Ô »ç¿ëÀÚµéÀ» À§ÇÑ ±æÀâÀ̸¦ ÀÛ¼ºÇÒ ÇÊ¿ä°¡ + »ý°å³×¿ä... + + ÇÊÀÚ´Â °³ÀÎÀûÀ¸·Î TortoiseSVN°ú Subclipse¸¦ »ç¿ëÇÏ°í ÀÖÀ¸³ª Subclpse¸¦ Áß½ÉÀ¸·Î + ¼³¸íÇÒ±î ÇÕ´Ï´Ù.(¼±È£ÇÏ´Â svn Ŭ¶óÀ̾ðÆ®°¡ ÀÖ´Ù¸é ÇØ´ç Ŭ¶óÀ̾ðÆ®ÀÇ ¼³Á¤¿¡ + µû¶ó ¼³Á¤ÇÑ ÈÄ¿¡ »ç¿ëÇϼŵµ µÉ °ÍÀÔ´Ï´Ù.) + + [Subclipse ¼³Ä¡] + + Subclipse¸¦ ¼³Ä¡ÇÏ´Â ¹æ¹ýÀº http://subclipse.tigris.org/install.html À» ÂüÁ¶ÇÏ¿© + eclipseÀÇ µµ¿ò¸»>¼ÒÇÁÆ®¿þ¾î°»½Å>ã±â ¹× ¼³Ä¡ ¸Þ´º¸¦ ÅëÇØ ½±°Ô ¼³Ä¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. + + [Subclipse Checkout] + 0) Subclipse ¼³Ä¡°¡ ³¡³µÀ¸¸é ÀÌŬ¸³½º¸¦ Àç½ÃÀÛÇϽʽÿÀ. + 1) ÀÌŬ¸³½ºÀÇ Perspective ¿­±â¿¡¼­ SVN Repository exploringÀ» ¿­¾î ÀúÀå¼Ò¸¦ µî·ÏÇÏ¿© »ç¿ëÇϰųª + ÀÌŬ¸³½ºÀÇ ÆÐÅ°Áö Ž»ö±â¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ Æ˾÷ ¸Þ´º¿¡¼­ "ÇÁ·ÎÁ§Æ®"¸¦ »ý¼º½Ãŵ´Ï´Ù. + ¿©±â¼­´Â "ÇÁ·ÎÁ§Æ®" »ý¼º ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù. + 2) ÀÌŬ¸³½ºÀÇ ÆÐÅ°Áö Ž»ö±â¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ Æ˾÷ ¸Þ´º¿¡¼­ "ÇÁ·ÎÁ§Æ®"¸¦ Ŭ¸¯ÇÑ´Ù + 3) Æ˾÷ âÀÇ "SVN" ³ëµå¿¡¼­ "Checkout Projects from SVN"À» ¼±ÅÃÇÑ´Ù + 4) "´ÙÀ½" ¹öÆ°À» Ŭ¸¯ÇÑ´Ù + 5) "Create a new respository location"À» ¼±ÅÃÇÑ´Ù + 6) ´ÙÀ½" ¹öÆ°À» Ŭ¸¯ÇÑ´Ù + 7) Location url¿¡ "http://anonhibernate.labs.jboss.com/trunk/Hibernate3" ¶Ç´Â + "https://hibernate.labs.jboss.com/repos/hibernate/trunk" À» ÀÔ·ÂÇÕ´Ï´Ù. + 8) "Hibernate3" ³ëµå´Â ¼±ÅÃÇϰųª ÇÏÀ§ÀÇ Æ¯Á¤ ³ëµå¸¦ ¼±ÅÃÇÏ°í "¿Ï·á" ¹öÆ°À» Ŭ¸¯ÇÑ´Ù. + 9) ÇÁ·ÎÁ§Æ® ¸íÀ» hibernate3 µîÀÇ ¿øÇÏ´Â À̸§À¸·Î ¸í¸íÇÑ´Ù. + 10) checkoutÀÌ ½ÇÇàµË´Ï´Ù. + + [TortoiseSVN ¼³Ä¡] + TortoiseSVN Ŭ¶óÀ̾ðÆ®¸¦ ¼³Ä¡Çϼ̴ٸé, ½Ã½ºÅÛÀ» Àç½ÃÀÛ ÇϽʽÿÀ. + 1)·¹ÆÄÁöÅ丮¸¦ À§ÇÑ Æú´õ¸¦ Çϳª »ý¼º½Ãŵ´Ï´Ù.(D:\repo) + 2)À©µµ¿ìŽ»ö±â¿¡¼­ D:\repo¸¦ ¸¶¿ì½º ¿À¸¥ÂÊ Å¬¸¯ÇÑ ÈÄ TortoiseSVN ¸Þ´º¿¡¼­ + "Create repository Here..."¸¦ Ŭ¸¯Çϸé Æ˾÷ÀÌ ¶ß´Âµ¥, + ÆÄÀϽýºÅÛ/¹öŬ¸®DB Çü½Ä Áß Çϳª¸¦ ¼±ÅÃÇÏ°í OK ¹öÆ°À» ´©¸£¼¼¿ä. + 3)hibernate¸¦ ³»·Á ¹Þ±â À§ÇÑ Æú´õ¸¦ Çϳª »ý¼º½ÃÅ°¼¼¿ä(D:\repo\Hibernate3) + 4)D:\repo\hibernate Æú´õ¸¦ ¸¶¿ì½º ¿À¸¥ÂÊ Å¬¸¯ÇÑ ÈÄ, + TortoiseSVN Æ˾÷ ¸Þ´º¿¡¼­ CheckOutÀ» Ŭ¸¯ÇϽʽÿÀ. + 5)URL repository¿¡ "http://anonhibernate.labs.jboss.com/trunk/Hibernate3" ¶Ç´Â + "https://hibernate.labs.jboss.com/repos/hibernate/trunk" ¸¦ ÀÔ·ÂÇÏ°í, + OK ¹öÆ°À» Ŭ¸¯ÇϽʽÿÀ + 6)¸ðµÎ ³»·Á¹ÞÀ¸½Å ´ÙÀ½¿¡ D:\repo\Hibernate3\doc\reference·Î À̵¿ÇÕ´Ï´Ù. + 7)ÀÌÁ¦ ºôµåÇÏ½Ã¸é µË´Ï´Ù. + + *) ÇÑ±Û ¹ø¿ªº»¸¸ ÇÊ¿äÇÏ½Ã´Ù¸é ´ÙÀ½°ú °°ÀÌ Çϼŵµ µË´Ï´Ù. + /doc/reference/build.xml ÆÄÀÏÀ» ¾Æ·¡ ¿¹¿Í °°ÀÌ ÇÑ±Û ¹ø¿ªº» ¿ÜÀÇ ºÎºÐµéÀ» ÁÖ¼®Ã³¸®ÇÕ´Ï´Ù. - [¶ó]. ºôµåÇϱâ + [°¡]. ºôµåÇϱ⠱׷± ´ÙÀ½ [·ÎÄà °æ·Î]/reference/ ¿¡¼­ ant all.doc·Î ºôµåÇÏ½Ã¸é µË´Ï´Ù. ºôµå ½Ã°£Àº 2ºÐ °¡·® ¼Ò¿äµË´Ï´Ù. - [¸¶]. ¹®¼­ º¸±â + [³ª]. ¹®¼­ º¸±â µð·ºÅ丮 [·ÎÄà °æ·Î]/reference/build/ko/ µð·ºÅ丮¿¡ ºôµåµÈ ¹®¼­¸¦ º¸½Ã±â ¹Ù¶ø´Ï´Ù. ±×·³ ÇÏÀ̹ö³×ÀÌÆ®¿Í ÇÔ²² Áñ°Å¿î ½Ã°£À» º¸³»¼¼¿ä. diff --git a/reference/ko/fop/userconfig.xml b/reference/ko/fop/userconfig.xml index be63f380fe..c8fd2004f9 100644 --- a/reference/ko/fop/userconfig.xml +++ b/reference/ko/fop/userconfig.xml @@ -92,17 +92,17 @@ fontBaseDir: Similar to baseDir, except that this value is used for fonts. If --> - - - - - + + + + + - - - - - + + + + + diff --git a/reference/ko/master.xml b/reference/ko/master.xml index 35466e5d87..f8ee21ef7b 100644 --- a/reference/ko/master.xml +++ b/reference/ko/master.xml @@ -33,7 +33,7 @@ HIBERNATE - 개성있는 ìžë°”를 위한 관계 ì˜ì† 하ì´ë²„네ì´íŠ¸ 참조 문서 - 3.1 + 3.2 cr3 diff --git a/reference/ko/modules/architecture.xml b/reference/ko/modules/architecture.xml index 291d805a54..8ab14bfe6a 100644 --- a/reference/ko/modules/architecture.xml +++ b/reference/ko/modules/architecture.xml @@ -78,19 +78,19 @@ - Persistent objects and collections + ì˜ì† ê°ì²´ë“¤ê³¼ 콜렉션들 persistent ìƒíƒœì™€ 비지니스 ê¸°ëŠ¥ì„ í¬í•¨í•˜ëŠ” ìˆ˜ëª…ì´ ì§§ê³ , ë‹¨ì¼ ì“°ë ˆë“œì¸ ê°ì²´ë“¤. ì´ê²ƒë“¤ì€ 통ìƒì˜ JavaBeans/POJOë“¤ì¼ ìˆ˜ 있고, ì˜¤ì§ ê·¸ê²ƒë“¤ì— ëŒ€í•œ ì˜¤ì§ íŠ¹ë³„í•œ ê²ƒì€ ê·¸ê²ƒë“¤ì´ í˜„ìž¬ (정확하게 í•œ ê°œì˜) Sessionê³¼ ì—°ê´€ë˜ì–´ 있다는 ì ì´ë‹¤. Sessionì´ ë‹«ížˆìžë§ˆìž, ê·¸ê²ƒë“¤ì€ ë¶„ë¦¬ë (detached ìƒíƒœê°€ ë ) 것ì´ê³  어플리케ì´ì…˜ - ë ˆì´ì–´ì—ì„œ 사용하는 ê²ƒì´ ìžìœ ë¡œì™€ì§„다(예를 들면. 프리젠테ì´ì…˜ìœ¼ë¡œì˜ ë°ì´í„° 전송 ê°ì²´ë“¤ë¡œì„œ ì§ì ‘ì ìœ¼ë¡œ 그리고 프리젠테ì´ì…˜ìœ¼ë¡œë¶€í„° - ë°ì´í„° 전송 ê°ì²´ë“¤ë¡œì„œ ì§ì ‘으로). + ë ˆì´ì–´ì—ì„œ 사용하는 ê²ƒì´ ìžìœ ë¡œì™€ì§„다(예를 들면. ì§ì ‘ì ìœ¼ë¡œ 프리젠테ì´ì…˜ 계층으로 + ë°ì´í„° 전송 ê°ì²´ë“¤ë¡œì„œ 그리고 ì§ì ‘ì ìœ¼ë¡œ 프리젠테ì´ì…˜ 계층으로부터 ë°ì´í„° 전송 ê°ì²´ë“¤ë¡œì„œ). - Transient and detached objects and collections + ì „ì´(Transient, í•„ìž ì£¼-ê³¼ë„) ê°ì²´ë“¤ê³¼ 콜렉션들 Sessionê³¼ 현재 ì—°ê´€ë˜ì–´ 있지 ì•Šì€ ì˜ì† í´ëž˜ìŠ¤ë“¤ì˜ ì¸ìŠ¤í„´ìŠ¤ë“¤. ê·¸ê²ƒë“¤ì€ ì–´í”Œë¦¬ì¼€ì´ì…˜ì— ì˜í•´ 초기화 @@ -236,7 +236,7 @@ - + 컨í…스트 ìƒì˜ 세션들 Hibernate를 사용하는 ëŒ€ë¶€ë¶„ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ë“¤ì€ ì–´ë–¤ ì–‘ì‹ì˜ "컨í…스트ìƒì˜(contextual)" ì„¸ì…˜ë“¤ì„ í•„ìš”ë¡œ 한다. 여기서 @@ -264,7 +264,7 @@ ê·¸ê²ƒì˜ ê³„ì•½ì— ëŒ€í•œ ìƒì„¸í•œ ë…¼ì˜ëŠ” org.hibernate.context.CurrentSessionContext ì¸í„°íŽ˜ì´ìŠ¤ì— 관한 javadocs를 ë³´ë¼. ê·¸ê²ƒì€ í•˜ë‚˜ì˜ ë©”ì†Œë“œ, currentSession()를 ì •ì˜í•˜ë©°, ê·¸ êµ¬í˜„ì€ - í˜„ìž¬ì˜ ì»¨í…스트 ìƒì˜ ì„¸ì…˜ì„ ì¶”ì í•  ì±…ìž„ì´ ìžˆë‹¤. 비공ì‹ì ìœ¼ë¡œ, Hibernate는 ì´ ì¸í„°íŽ˜ì´ìŠ¤ì— 대한 구 ê°œì˜ êµ¬í˜„ë“¤ì„ ë¶€ìˆ˜ì ìœ¼ë¡œ + í˜„ìž¬ì˜ ì»¨í…스트 ìƒì˜ ì„¸ì…˜ì„ ì¶”ì í•  ì±…ìž„ì´ ìžˆë‹¤. 비공ì‹ì ìœ¼ë¡œ, Hibernate는 ì´ ì¸í„°íŽ˜ì´ìŠ¤ì— 대한 세 ê°œì˜ êµ¬í˜„ë“¤ì„ ë¶€ìˆ˜ì ìœ¼ë¡œ í¬í•¨í•˜ê³  있다. @@ -284,7 +284,7 @@ - ë‘ êµ¬í˜„ë“¤ì€ session-per-requestë¡œ 알려지고 사용ë˜ê³  있는 + 처ìŒì˜ ë‘ êµ¬í˜„ë“¤ì€ session-per-requestë¡œ 알려지고 사용ë˜ê³  있는 "í•˜ë‚˜ì˜ ì„¸ì…˜ - í•˜ë‚˜ì˜ ë°ì´í„°ë² ì´ìŠ¤ 트랜잭션" í”„ë¡œê·¸ëž˜ë° ëª¨í˜•ì„ ì œê³µí•œë‹¤. í•˜ë‚˜ì˜ Hibernate ì„¸ì…˜ì˜ ì‹œìž‘ê³¼ ëì€ ë°ì´í„°ë² ì´ìŠ¤ íŠ¸ëžœìž­ì…˜ì˜ ì¡´ì† ê¸°ê°„ì— ì˜í•´ ì •ì˜ëœë‹¤. ë§Œì¼ (예를 들면 순수 J2SEì—ì„œ ë˜ëŠ” JTA/UserTransaction/BMTì˜ ê²½ìš°ì—) ë‹¹ì‹ ì´ í”„ë¡œê·¸ëž¨ ìƒì˜ 트랜잭션 ê²½ê³„êµ¬ë¶„ì„ ì‚¬ìš©í•  경우, ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ ì½”ë“œë¡œë¶€í„° 기본 트랜잭션 ì‹œìŠ¤í…œì„ ì€íì‹œí‚¤ëŠ”ë° diff --git a/reference/ko/modules/association_mapping.xml b/reference/ko/modules/association_mapping.xml index 5d4549d07b..bbeae4a9ae 100644 --- a/reference/ko/modules/association_mapping.xml +++ b/reference/ko/modules/association_mapping.xml @@ -48,8 +48,7 @@ ]]> @@ -79,8 +78,7 @@ create table Address ( addressId bigint not null primary key ) ]]> @@ -135,8 +133,7 @@ create table Address ( personId bigint not null primary key ) ]]> @@ -177,8 +174,7 @@ create table Address ( addressId bigint not null primary key, ]]> @@ -211,8 +207,7 @@ create table Address ( addressId bigint not null primary key ) ]]> @@ -247,8 +242,7 @@ create table Address ( addressId bigint not null primary key ) ]]> @@ -279,9 +273,7 @@ create table Address ( addressId bigint not null primary key ) ]]> @@ -319,8 +311,7 @@ create table Address ( addressId bigint not null primary key ) ]]> @@ -386,8 +377,7 @@ create table Address ( addressId bigint not null primary key ) property-ref="address"/> ]]> @@ -459,8 +449,7 @@ create table Address ( personId bigint not null primary key ) ]]> @@ -505,8 +494,7 @@ create table Address ( addressId bigint not null primary key ) ]]> @@ -543,9 +531,7 @@ create table Address ( addressId bigint not null primary key ) diff --git a/reference/ko/modules/basic_mapping.xml b/reference/ko/modules/basic_mapping.xml index 44993fd68f..6cf5331b33 100644 --- a/reference/ko/modules/basic_mapping.xml +++ b/reference/ko/modules/basic_mapping.xml @@ -92,7 +92,7 @@ - + Doctype @@ -102,6 +102,56 @@ ë‹¹ì‹ ì´ ì¸í„°ë„· ì—°ê²°ì„ ì‚¬ìš©í•˜ëŠ” DTDì— ëŒ€í•œ ë£©ì—…ë“¤ì„ ê²ªê²Œ ë  ê²½ìš°, ë‹¹ì‹ ì˜ classpathì˜ ì»¨í…ì¸ ì— ëŒ€í•´ ë‹¹ì‹ ì˜ DTD ì„ ì–¸ì„ ì²´í¬í•˜ë¼. + + + EntityResolver + + ì•žì„œ 언급했듯ì´, Hibernate는 먼저 ê·¸ê²ƒì˜ classpathì—ì„œ DTDë“¤ì„ í•´ì„하려고 ì‹œë„í•  것ì´ë‹¤. + Hibernateê°€ ì´ê²ƒì„ 행하는 ë°©ë²•ì€ ê·¸ê²ƒì´ xml 파ì¼ë“¤ì„ ì½ì–´ë“¤ì´ëŠ”ë° ì‚¬ìš©í•˜ëŠ” SAXReaderì— ë§žì¶¤í˜• + org.xml.sax.EntityResolver êµ¬í˜„ì„ ë“±ë¡í•˜ëŠ” 것ì´ë‹¤. ì´ ë§žì¶¤í˜• + EntityResolver는 ë‘ ê°œì˜ ë‹¤ë¥¸ systemId namespaceë“¤ì„ ì¸ì§€í•´ë‚¸ë‹¤. + + + + + hibernate namespace는 resolverê°€ + http://hibernate.sourceforge.net/ë¡œ 시작하는 í•˜ë‚˜ì˜ + systemId와 만날때마다 ì¸ì§€ëœë‹¤; resolver는 Hibernate í´ëž˜ìŠ¤ë“¤ì„ ë¡œë“œì‹œì¼°ë˜ í´ëž˜ìŠ¤ë¡œë”를 통해 + ì´ë“¤ ì—”í‹°í‹°ë“¤ì„ í•´ì„하려고 ì‹œë„한다. + + + + + user namespace는 resolverê°€ classpath:// + URL í”„ë¡œí† ì½œì„ ì‚¬ìš©í•˜ëŠ” systemId를 만날때마다 ì¸ì§€ëœë‹¤; resolver는 (1)현재 쓰레드 컨í…스트 + í´ëž˜ìŠ¤ë¡œë”와 (2)Hibernate í´ëž˜ìŠ¤ë“¤ì„ ë¡œë“œì‹œì¼°ë˜ í´ëž˜ìŠ¤ë¡œë”를 통해 ì´ë“¤ ì—”í‹°í‹°ë“¤ì„ í•´ì„하려고 + ì‹œë„í•  것ì´ë‹¤. + + + + + user namespacingì„ í™œìš©í•˜ëŠ” 예제: + + + +]> + + + + + ... + + + &types; +]]> + + 여기서 types.xmlì€ your.domain 패키지 ë‚´ì— ìžˆëŠ” 리소스ì´ê³  + 맞춤형 typedef를 í¬í•¨í•œë‹¤. + + @@ -692,6 +742,17 @@ + + sequence-identity + + + 실제 ê°’ ìƒì„±ì„ 위해 ë°ì´í„°ë² ì´ìŠ¤ 시퀀스를 활용하지만, ìƒì„±ëœ ì‹ë³„ìž ê°’ì„ insert 문장 ì‹¤í–‰ì˜ ë¶€ë¶„ìœ¼ë¡œì„œ + 실제로 반환시키기 위해 ì´ê²ƒì„ JDBC3 getGeneratedKeys와 결합시킨 íŠ¹í™”ëœ ì‹œí€€ìŠ¤ ìƒì„± ë°©ë„. ì´ ë°©ë„는 + JDK 1.4ì— ëŒ€ìƒí™”ëœ Oracle 10g ë“œë¼ì´ë²„들 ìƒì—서만 지ì›ë˜ëŠ” 거승로 알려져 있다. ì´ë“¤ insert ë¬¸ìž¥ë“¤ì— + 대한 주ì„ë“¤ì€ Oracle ë“œë¼ì´ë²„들 ë‚´ì— ìžˆëŠ” 버그 ë•Œë¬¸ì— ì‚¬ìš©ë¶ˆê°€ëŠ¥í•˜ê²Œ ë˜ì–´ 있ìŒì„ 노트하ë¼. + + + @@ -1082,7 +1143,7 @@ - + timestamp (옵션) @@ -1090,7 +1151,7 @@ ë²„ì „í™”ì— ëŒ€í•œ 대체물로서 고안ë˜ì—ˆë‹¤. Timestampì€ ê³ ìœ í•˜ê²Œ optimistic ìž ê¸ˆì— ëŒ€í•œ 다소 안전한 구현ì´ë‹¤. 하지만 때때로 어플리케ì´ì…˜ì€ 다른 방법들로 timestampë“¤ì„ ì‚¬ìš©í•  ìˆ˜ë„ ìžˆë‹¤. - + @@ -1123,7 +1184,7 @@ 가진 ìžë°”빈즈 스타ì¼ì˜ 프로í¼í‹° ì´ë¦„. - + access (옵션 - ë””í´íŠ¸ëŠ” property): Hibernateê°€ 프로í¼í‹° ê°’ì— ì ‘ê·¼í•˜ëŠ”ë° ì‚¬ìš©í•  ë°©ë„. @@ -1140,18 +1201,18 @@ source (옵션 - ë””í´íŠ¸ëŠ” vm): - Hibernate는 ì–´ëŠ ìž¥ì†Œë¡œë¶€í„° timestamp ê°’ì„ ê²€ìƒ‰í•  것ì¸ê°€? ë°ì´í„°ë² ì´ìŠ¤ë¡œë¶€í„°ì¸ê°€ í˜„ìž¬ì˜ JVM으로부터ì¸ê°€? - Hibernateê°€ "ë‹¤ìŒ ê°’"ì„ ê²°ì •í•˜ê¸° 위해 ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ì†í•´ì•¼ 하기 ë•Œë¬¸ì— ë°ì´í„°ë² ì´ìŠ¤ ê¸°ë°˜ì˜ - timestampë“¤ì€ ì˜¤ë²„í—¤ë“œë¥¼ 초래하지만, í´ëŸ¬ìŠ¤í„°ë§ëœ í™˜ê²½ë“¤ì˜ ìš©ë„ë¡œ ë” ì•ˆì „í•  것ì´ë‹¤. ë˜í•œ 모든 + Hibernate는 어디서 timestamp ê°’ì„ ê²€ìƒ‰í•  것ì¸ê°€? ë°ì´í„°ë² ì´ìŠ¤ë¡œë¶€í„°ì¸ê°€ í˜„ìž¬ì˜ JVM으로부터ì¸ê°€? + ë°ì´í„°ë² ì´ìŠ¤ ê¸°ë°˜ì˜ timestampë“¤ì€ Hibernateê°€ "ë‹¤ìŒ ê°’"ì„ ê²°ì •í•˜ê¸° 위해 ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ì†í•´ì•¼ + 하기 ë•Œë¬¸ì— ì˜¤ë²„í—¤ë“œë¥¼ 초래하지만, í´ëŸ¬ìŠ¤í„°ë§ëœ 환경들ì—ì„œì˜ ìš©ë„ë¡œ 보다 ë” ì•ˆì „í•  것ì´ë‹¤. ë˜í•œ 모든 Dialectë“¤ì´ ë°ì´í„°ë² ì´ìŠ¤ì˜ í˜„ìž¬ì˜ timestampì— ëŒ€í•œ ê²€ìƒ‰ì„ ì§€ì›í•˜ëŠ” 것으로 알려져 - 있는 반면ì—, 다른 Dialectë“¤ì€ ì •ë°€ë„ ê²°í• ë•Œë¬¸ì— ìž ê¸ˆì— ìžˆì–´ ì‚¬ìš©ì— ëŒ€í•´ 안전하지 ì•Šì„ + 있지 않지만, 다른 Dialectë“¤ì€ ì •ë°€ë„ ê²°í• ë•Œë¬¸ì— ìž ê¸ˆì— ìžˆì–´ ì‚¬ìš©ì´ ì•ˆì „í•˜ì§€ ì•Šì„ ìˆ˜ 있ìŒì„ 노트하ë¼(예를 들면 오ë¼í´ 8). generated (옵션 - ë””í´íŠ¸ëŠ” never): - ì´ timestamp 프로í¼í‹° ê°’ì´ ë°ì´í„°ë² ì´ìŠ¤ì— ì˜í•´ 실제로 산출ë˜ëŠ”지를 지정한다. + ì´ timestamp 프로í¼í‹° ê°’ì´ ë°ì´í„°ë² ì´ìŠ¤ì— ì˜í•´ 실제로 ìƒì„±ë¨ì„ 지정한다. 산출ë˜ëŠ” 프로í¼í‹°ë“¤ì— 대한 ë…¼ì˜ë“¤ ë³´ë¼. @@ -2202,7 +2263,8 @@ join - <join> 요소를 사용하면, í•œ ê°œì˜ í´ëž˜ìŠ¤ì˜ 프로í¼í‹°ë“¤ì„ 몇 ê°œì˜ í…Œì´ë¸”들로 매핑시키는 ê²ƒì´ + <join> í…Œì´ë¸”들 사ì´ì— 1ëŒ€ì¼ ê´€ê³„ê°€ 존재할 ë•Œ, + 요소를 사용하여 í•˜ë‚˜ì˜ í´ëž˜ìŠ¤ì— ì†í•œ 프로í¼í‹°ë“¤ì„ 몇 ê°œì˜ í…Œì´ë¸”들로 매핑시키는 ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤. diff --git a/reference/ko/modules/batch.xml b/reference/ko/modules/batch.xml index c214ff594e..05d55a8909 100644 --- a/reference/ko/modules/batch.xml +++ b/reference/ko/modules/batch.xml @@ -28,8 +28,6 @@ session.close();]]> ë‹¹ì‹ ì€ ë˜í•œ second-level ìºì‹œë¥¼ 가진 ìƒí˜¸ìž‘ìš©ì´ ì™„ì „í•˜ê²Œ 불가능한 프로세스 ë‚´ì—ì„œ ì´ëŸ° ì¢…ë¥˜ì˜ ìž‘ì—…ì„ í–‰í•˜ê³  싶어할 ìˆ˜ë„ ìžˆë‹¤: - You also might like to do this kind of work in a process where interaction with - the second-level cache is completely disabled: @@ -94,7 +92,6 @@ tx.commit(); session.close();]]> - StatelessSession ì¸í„°íŽ˜ì´ìŠ¤ @@ -140,7 +137,7 @@ session.close();]]> - + DML-ìŠ¤íƒ€ì¼ ì—°ì‚°ë“¤ @@ -151,9 +148,9 @@ session.close();]]> (HQL)를 통해 실행ë˜ëŠ” 대량 SQL-스타ì¼ì˜ DML 문장 ì‹¤í–‰ì„ ìœ„í•œ ë©”ì†Œë“œë“¤ì„ ì œê³µí•œë‹¤. - - UPDATE와 DELETE ë¬¸ìž¥ë“¤ì˜ ìœ ì‚¬-êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다: - ( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?. 노트할 몇 가지 : + + UPDATE와 DELETE ë¬¸ìž¥ë“¤ì— ëŒ€í•œ 유사 êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다: + ( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?. 노트할 몇 가지: @@ -201,10 +198,34 @@ tx.commit(); session.close();]]> - í•œ ê°œì˜ HQL DELETE를 실행하기 위해, ë™ì¼í•œ Query.executeUpdate() 메소드를 - 사용하ë¼: + HQL UPDATE ë¬¸ìž¥ë“¤ì€ ë””í´íŠ¸ë¡œ ì˜í–¥ë°›ëŠ” ì—”í‹°í‹°ë“¤ì— ëŒ€í•œ + version ë˜ëŠ” + timestamp 프로í¼í‹° ê°’ë“¤ì— ì˜í–¥ì„ 주지 않는다; + ì´ê²ƒì€ EJB3 명세서ì—ì„œ 유지ë˜ê³  있다. 하지만 ë‹¹ì‹ ì€ í•˜ì´ë²„네ì´íŠ¸ë¡œ 하여금 versioned updateì˜ + ì‚¬ìš©ì„ í†µí•´ version ë˜ëŠ” timestamp 프로í¼í‹° ê°’ë“¤ì„ ì ì ˆí•˜ê²Œ + 재설정하ë„ë¡ ê°•ì œí•  수 있다. ì´ê²ƒì€ UPDATE 키워드 ë’¤ì— VERSIONED 키워드를 + 추가시켜서 성취ëœë‹¤. + + + + + 맞춤형 version 타입들(org.hibernate.usertype.UserVersionType)ì€ + update versioned 문장과 함께 사용하는 ê²ƒì´ í—ˆìš©ë˜ì§€ ì•ŠìŒì„ 노트하ë¼. + + HQL DELETE를 실행하려면, ê°™ì€ ë©”ì†Œë“œ Query.executeUpdate()를 + 사용하ë¼: + + - - + ]]> diff --git a/reference/ko/modules/configuration.xml b/reference/ko/modules/configuration.xml index 3989b941a7..b871e56720 100644 --- a/reference/ko/modules/configuration.xml +++ b/reference/ko/modules/configuration.xml @@ -653,8 +653,15 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]> ì„ íƒí•  것ì´ë‹¤. eg. - on_close (ë””í´íŠ¸) | after_transaction | - after_statement | auto + auto (ë””í´íŠ¸) | on_close | + after_transaction | after_statement + + + ì´ ì„¤ì •ì´ SessionFactory.openSession로부터 ë°˜í™˜ëœ Session들ì—만 + ì˜í–¥ì„ 준다는 ì ì„ 노트하ë¼. SessionFactory.getCurrentSessionì„ í†µí•´ 얻어진 + Sessionë“¤ì˜ ê²½ìš°, 사용하기 위해 êµ¬ì„±ëœ CurrentSessionContext êµ¬í˜„ì´ + 그들 Sessionë“¤ì— ëŒ€í•œ ì—°ê²° 해제를 제어한다. 를 + ë³´ë¼. @@ -864,7 +871,7 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]> - +
여러가지 프로í¼í‹°ë“¤ @@ -882,12 +889,12 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]> "현재" Sessionì˜ ì˜ì—­í™”를 위한 í•˜ë‚˜ì˜ (맞춤) ë°©ë„를 - 공급한다. 빌드ë˜ì–´ 있는 ë°©ë„ë“¤ì— ëŒ€í•œ 추가 정보는 + 제공한다. 빌드ë˜ì–´ 있는 ë°©ë„ë“¤ì— ëŒ€í•œ 추가 정보는 를 ë³´ë¼. 예. - jta | thread | - custom.Class + jta | thread | + managed | custom.Class @@ -899,7 +906,7 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]> Chooses the HQL 파서 êµ¬í˜„ì„ ì„ íƒí•œë‹¤. 예. - org.hibernate.hql.ast.ASTQueryTranslatorFactory ë˜ëŠ” + org.hibernate.hql.ast.ASTQueryTranslatorFactory or org.hibernate.hql.classic.ClassicQueryTranslatorFactory @@ -909,7 +916,8 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]> hibernate.query.substitutions - Hibernate 질ì˜ë“¤ ë‚´ì˜ í† í°ë“¤ë¡œë¶€í„° SQL 토í°ë“¤ë¡œì˜ 매핑(예를 들어 토í°ë“¤ì€ 함수 ì´ë¦„ ë˜ëŠ” 리터럴 ì´ë¦„ì¼ ìˆ˜ 있다). + Hibernate 질ì˜ë“¤ ë‚´ì˜ í† í°ë“¤ë¡œë¶€í„° SQL 토í°ë“¤ë¡œì˜ 매핑 + (예를 들어 토í°ë“¤ì€ 함수 ì´ë¦„ ë˜ëŠ” 리터럴 ì´ë¦„ì¼ ìˆ˜ 있다). 예. hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC @@ -921,8 +929,10 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]> hibernate.hbm2ddl.auto - SessionFactoryê°€ ìƒì„±ë  ë•Œ 스키마 DDLì„ ë°ì´í„°ë² ì´ìŠ¤ë¡œ ìžë™ì ìœ¼ë¡œ 유효성 검사하거나 내보내기 한다. create-dropì˜ ê²½ìš°, - SessionFactoryê°€ 명시ì ìœ¼ë¡œ 닫혀질 ë•Œ,, ë°ì´í„°ë² ì´ìŠ¤ 스키마가 ë“œë¡­ë  ê²ƒì´ë‹¤. + SessionFactoryê°€ ìƒì„±ë  ë•Œ, ìžë™ì ìœ¼ë¡œ ìœ íš¨ì„±ì„ ê²€ì‚¬í•˜ê±°ë‚˜ + schema DDLì„ ë°ì´í„°ë² ì´ìŠ¤ë¡œ 내보내기 한다. create-dropì˜ ê²½ìš°, + SessionFactoryê°€ 명시ì ìœ¼ë¡œ 닫혀질 ë•Œ ë°ì´í„°ë² ì´ìŠ¤ 스키마가 + ë“œë¡­ë  ê²ƒì´ë‹¤. 예. validate | update | @@ -935,8 +945,10 @@ hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]> hibernate.cglib.use_reflection_optimizer - 런타임 reflection ëŒ€ì‹ ì— CGLIBì˜ ì‚¬ìš©ì„ ê°€ëŠ¥í•˜ë„ë¡ ë§Œë“ ë‹¤(시스템 레벨 프로í¼í‹°). Reflectionì€ ë¬¸ì œê°€ ë°œìƒí•  ì‹œì— ë•Œë•Œë¡œ 유용할 수 있고, - ë‹¹ì‹ ì´ optimizer를 사용하지 ì•Šì„ ê²½ìš°ì¡°ì°¨ë„ Hibernate는 í•­ìƒ í•„ìš”ë¡œ í•¨ì„ ìœ ì˜í•˜ë¼. ë‹¹ì‹ ì€ hibernate.cfg.xml + 런타임 reflection ëŒ€ì‹ ì— CGLIBì˜ ì‚¬ìš©ì„ ê°€ëŠ¥í•˜ë„ë¡ ë§Œë“ ë‹¤(시스템 레벨 프로í¼í‹°). + Reflectionì€ ë¬¸ì œê°€ ë°œìƒí•  ì‹œì— ë•Œë•Œë¡œ 유용할 수 있고, + ë‹¹ì‹ ì´ optimizer를 사용하지 ì•Šì„ ê²½ìš°ì¡°ì°¨ë„ Hibernate는 í•­ìƒ í•„ìš”ë¡œ í•¨ì„ ìœ ì˜í•˜ë¼. + ë‹¹ì‹ ì€ hibernate.cfg.xml ì†ì— ì´ í”„ë¡œí¼í‹°ë¥¼ 설정할수 없다. 예. diff --git a/reference/ko/modules/events.xml b/reference/ko/modules/events.xml index 6724362453..3bfa6ba832 100644 --- a/reference/ko/modules/events.xml +++ b/reference/ko/modules/events.xml @@ -6,7 +6,7 @@ 그리고 Hibernateì˜ í™•ìž¥ ê¸°ëŠ¥ì˜ êµ¬í˜„ì„ í—ˆìš©í•´ì¤€ë‹¤. - + ì¸í„°ì…‰í„°ë“¤ @@ -106,7 +106,14 @@ public class AuditInterceptor extends EmptyInterceptor { }]]> - ì„¸ì…˜ì´ ìƒì„±ë  ë•Œ ì¸í„°ì…‰í„°ê°€ ì§€ì •ë  ê²ƒì´ë‹¤. + ì¸í„°ì…‰í„°ë“¤ì€ ë‹¤ìŒ ë‘ ê°œì˜ íŠ¹ì§•ë“¤ë¡œ 나타난다: Session-ì˜ì—­í™” 그리고 + SessionFactory-ì˜ì—­í™”. + + + + Session-ì˜ì—­ì˜ ì¸í„°ì…‰í„°ëŠ” ì„¸ì…˜ì´ í•˜ë‚˜ì˜ Interceptor를 수용하는 + ì˜¤ë²„ë¡œë“œëœ SessionFactory.openSession() 메소드들 중 하나를 사용하여 열릴 ë•Œ + 지정ëœë‹¤. @@ -116,23 +123,34 @@ public class AuditInterceptor extends EmptyInterceptor { ì´ ê²½ìš°ì—, ì¸í„°ì…‰í„°ëŠ” threadsafeì´ì–´ì•¼ 한다. + + + + SessionFactory-ì˜ì—­ì˜ ì¸í„°ì…‰í„°ëŠ” SessionFactoryì„ ë¹Œë“œí•˜ê¸°ì— ì•žì„œ + Configuration ê°ì²´ì— 등ë¡ëœë‹¤. ì´ ê²½ìš°ì—, 공급ë˜ëŠ” ì¸í„°ì…‰í„°ëŠ” ê·¸ SessionFactory로부터 + 열려진 모든 ì„¸ì…˜ë“¤ì— ì ìš©ë  것ì´ë‹¤; í•˜ë‚˜ì˜ ì„¸ì…˜ì´ ì‚¬ìš©í•  ì¸í„°ì…‰í„°ë¥¼ 명시ì ìœ¼ë¡œ 지정하여 열리지 않는 í•œ ì´ê²ƒì€ ì°¸ì´ë‹¤. + SessionFactory-ì˜ì—­ì˜ ì¸í„°ì…‰í„°ë“¤ì€ 세션-지정ì ì¸ ìƒíƒœë¥¼ 저장하지 ì•Šë„ë¡ ì£¼ì˜í•˜ì—¬ 쓰레드-안전해야 한다. + 왜ëƒí•˜ë©´ 다중 ì„¸ì…˜ë“¤ì€ (ìž ì •ì ìœ¼ë¡œ) ì´ ì¸í„°ì…‰í„°ë¥¼ ë™ì‹œì ìœ¼ë¡œ 사용할 것ì´ê¸° 때문ì´ë‹¤. + + - + ì´ë²¤íŠ¸ 시스템 - ë§Œì¼ ë‹¹ì‹ ì´ ë‹¹ì‹ ì˜ ì˜ì† 계층ì—ì„œ 특별한 ì´ë²¤íŠ¸ë“¤ì— 대해 ë°˜ì‘해야 한다면, ë‹¹ì‹ ì€ ë˜í•œ Hibernate3 ì´ë²¤íŠ¸ + ë§Œì¼ ë‹¹ì‹ ì´ ë‹¹ì‹ ì˜ ì˜ì† 계층ì—ì„œ 특정 ì´ë²¤íŠ¸ë“¤ì— 대해 ë°˜ì‘해야 한다면, ë‹¹ì‹ ì€ ë˜í•œ Hibernate3 event 아키í…처를 사용할 ìˆ˜ë„ ìžˆë‹¤. ì´ë²¤íŠ¸ ì‹œìŠ¤í…œì€ ë¶€ê°€ë¬¼ë¡œ ì‚¬ìš©ë  ìˆ˜ 있거나 ì¸í„°ì…‰í„°ë“¤ì— 대한 대체물로 ì‚¬ìš©ë  ìˆ˜ 있다. - 본질ì ìœ¼ë¡œ Session ì¸í„°íŽ˜ì´ìŠ¤ì˜ 모든 ë©”ì†Œë“œë“¤ì€ ì´ë²¤íŠ¸ì™€ 서로 관련ë˜ì–´ 있다. ë‹¹ì‹ ì€ LoadEvent, + 본질ì ìœ¼ë¡œ Session ì¸í„°íŽ˜ì´ìŠ¤ì˜ 모든 ë©”ì†Œë“œë“¤ì€ ì´ë²¤íŠ¸ì™€ 서로 관련ë˜ì–´ 있다. + ë‹¹ì‹ ì€ LoadEvent, FlushEvent, ë“±ì„ ê°–ëŠ”ë‹¤ (ì •ì˜ëœ ì´ë²¤íŠ¸ íƒ€ìž…ë“¤ì˜ ì „ì²´ ë¦¬ìŠ¤íŠ¸ì— ëŒ€í•´ì„œëŠ” XML 구성 íŒŒì¼ DTD ë˜ëŠ” org.hibernate.event 패키지를 참조하ë¼). í•˜ë‚˜ì˜ ìš”ì²­ì´ ì´ë“¤ 메소드들 중 í•˜ë‚˜ì— ì˜í•´ 만들어질 ë•Œ, - Hibernate Sessionì€ ì ì ˆí•œ ì´ë²¤íŠ¸ë¥¼ ìƒì„±ì‹œí‚¤ê³  ê·¸ê²ƒì„ ê·¸ íƒ€ìž…ì— ëŒ€í•œ êµ¬ì„±ëœ ì´ë²¤íŠ¸ 리스너ì—게 전달한다. + Hibernate Sessionì€ ì ì ˆí•œ ì´ë²¤íŠ¸ë¥¼ ìƒì„±ì‹œí‚¤ê³  ê·¸ê²ƒì„ ê·¸ íƒ€ìž…ì˜ êµ¬ì„±ëœ ì´ë²¤íŠ¸ 리스너ì—게 전달한다. 박싱없ì´, ì´ë“¤ ë¦¬ìŠ¤ë„ˆë“¤ì€ ê·¸ë“¤ ë©”ì†Œë“œë“¤ì´ í•­ìƒ ê·€ê²°ë˜ì—ˆë˜ ë™ì¼í•œ í”„ë¡œì„¸ì‹±ì„ êµ¬í˜„í•œë‹¤. 하지만 ë‹¹ì‹ ì´ ë¦¬ìŠ¤ë„ˆ ì¸í„°íŽ˜ì´ìŠ¤ë“¤ 중 í•˜ë‚˜ì˜ ë§žì¶¤ì„ êµ¬í˜„í•˜ëŠ” ê²ƒì´ ìžìœ ë¡­ê³ (예를 들어 LoadEvent는 LoadEventListener ì¸í„°íŽ˜ì´ìŠ¤ì˜ 등ë¡ëœ êµ¬í˜„ì— ì˜í•´ 처리ëœë‹¤), ê·¸ ê²½ìš°ì— ê·¸ë“¤ êµ¬í˜„ì€ Sessionì— ëŒ€í•´ 행해진 ìž„ì˜ì˜ load() @@ -146,10 +164,10 @@ public class AuditInterceptor extends EmptyInterceptor { 맞춤형 리스너는 ê·¸ê²ƒì´ íŽ¸ì˜ì ì¸ 기저 í´ëž˜ìŠ¤ë“¤(ë˜ëŠ” ë¦¬ìŠ¤ë„ˆë“¤ì´ ì´ ìš©ë„ë¡œ finalì´ ì•„ë‹Œ 것으로 ì„ ì–¸ë˜ë¯€ë¡œ Hibernate - out-of-the-boxì— ì˜í•´ ì‚¬ìš©ëœ ë””í´íŠ¸ ì´ë²¤íŠ¸ 리스너들) 중 하나를 ì²˜ë¦¬í•˜ê³ ìž ê·¸ë¦¬ê³ /ë˜ëŠ” í™•ìž¥í•˜ê³ ìž ì›í•˜ëŠ” ì´ë²¤íŠ¸ë“¤ì— 대해 + out-of-the-boxì— ì˜í•´ ì‚¬ìš©ëœ ë””í´íŠ¸ ì´ë²¤íŠ¸ 리스너들) 중 하나를 처리하고/하거나 í™•ìž¥í•˜ê³ ìž ì›í•˜ëŠ” ì´ë²¤íŠ¸ë“¤ì— 대해 ì ì ˆí•œ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현해야 한다. 맞춤형 ë¦¬ìŠ¤ë„ˆë“¤ì€ Configuration ê°ì²´ë¥¼ 통해 프로그램 ìƒìœ¼ë¡œ 등ë¡ë  수 있거나, Hibernate 구성 XML ì†ì— ì§€ì •ë  ìˆ˜ 있다 (properties 파ì¼ì„ 통한 ì„ ì–¸ì ì¸ êµ¬ì„±ì€ ì§€ì›ë˜ì§€ 않는다). - 다ìŒì€ 맞춤형 load ì´ë²¤íŠ¸ ë¦¬ìŠ¤ë„ˆì— ëŒ€í•œ 예제ì´ë‹¤: + 다ìŒì€ 맞춤형 load ì´ë²¤íŠ¸ ë¦¬ìŠ¤ë„ˆì— ëŒ€í•œ 예제ì´ë‹¤: - ì„ ì–¸ì ìœ¼ë¡œ 등ë¡ëœ ë¦¬ìŠ¤ë„ˆë“¤ì€ ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 공유할 수 없다. ë§Œì¼ ë™ì¼í•œ í´ëž˜ìŠ¤ ì´ë¦„ì´ ì—¬ëŸ¬ <listener/> + ì„ ì–¸ì ìœ¼ë¡œ 등ë¡ëœ ë¦¬ìŠ¤ë„ˆë“¤ì€ ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 공유할 수 없다. ë§Œì¼ ë™ì¼í•œ í´ëž˜ìŠ¤ ì´ë¦„ì´ ì—¬ëŸ¬ ê°œì˜ <listener/> 요소들ì—ì„œ ì‚¬ìš©ë  ê²½ìš°, ê°ê°ì˜ 참조는 ê·¸ í´ëž˜ìŠ¤ì— 대한 별ë„ì˜ ì¸ìŠ¤í„´ìŠ¤ë¡œ ê·€ê²°ë  ê²ƒì´ë‹¤. ë§Œì¼ ë‹¹ì‹ ì´ ë¦¬ìŠ¤ë„ˆ 타입들 사ì´ì—ì„œ 리스너 ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 공유할 ê°€ìš©ì„±ì„ í•„ìš”ë¡œ í•  경우 ë‹¹ì‹ ì€ í”„ë¡œê·¸ëž˜ë° ë°©ì‹ì˜ ë“±ë¡ ì ‘ê·¼ë²•ì„ ì‚¬ìš©í•´ì•¼ 한다. - 컨피그레ì´ì…˜ ë™ì•ˆì— 왜 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하고 특정 íƒ€ìž…ì„ ì§€ì •í•˜ëŠ”ê°€? 물론 리스너 êµ¬í˜„ì€ ì—¬ëŸ¬ ê°œì˜ ì´ë²¤íŠ¸ 리스너 ì¸í„°íŽ˜ì´ìŠ¤ë“¤ì„ + 구성 ë™ì•ˆì— 왜 ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 구현하고 특정 íƒ€ìž…ì„ ì§€ì •í•˜ëŠ”ê°€? 물론 리스너 êµ¬í˜„ì€ ì—¬ëŸ¬ ê°œì˜ ì´ë²¤íŠ¸ 리스너 ì¸í„°íŽ˜ì´ìŠ¤ë“¤ì„ 구현할 수 있다. ë“±ë¡ ë™ì•ˆì— 추가ì ìœ¼ë¡œ íƒ€ìž…ì„ ì •ì˜í•˜ëŠ” ê²ƒì€ ì»¨í”¼ê·¸ë ˆì´ì…˜ ë™ì•ˆì— 맞춤형 ë¦¬ìŠ¤ë„ˆë“¤ì˜ ì‚¬ìš© 여부를 전환시키는 ê²ƒì„ ë” ì‰½ê²Œ 해준다. diff --git a/reference/ko/modules/example_mappings.xml b/reference/ko/modules/example_mappings.xml index b6e3726449..85db9d6e31 100644 --- a/reference/ko/modules/example_mappings.xml +++ b/reference/ko/modules/example_mappings.xml @@ -538,7 +538,7 @@ alter table line_items ]]> - + ë‚´ìš© 기반 íŒë³„ ]]> + Table per class hierarchy diff --git a/reference/ko/modules/performance.xml b/reference/ko/modules/performance.xml index af691b298a..b31da5a661 100644 --- a/reference/ko/modules/performance.xml +++ b/reference/ko/modules/performance.xml @@ -576,11 +576,24 @@ Cat fritz = (Cat) iter.next();]]> 만료ë˜ë„ë¡ êµ¬ì„±ë˜ì–´ 있ì„지ë¼ë„) ë˜ ë‹¤ë¥¸ 어플리케ì´ì…˜ì— ì˜í•´ ì˜ì† ì €ìž¥ì†Œì— ëŒ€í•´ 행해진 ë³€ê²½ë“¤ì„ ê²°ì½” 알지 못한다. - + ë””í´íŠ¸ë¡œ, Hibernate는 JVM-ë ˆë²¨ì˜ ìºì‹±ì— EHCache를 사용한다. (JCS 지ì›ì€ ì´ì œ 진부하게 ë˜ì—ˆê³  Hibernateì˜ ìž¥ëž˜ 버전ì—ì„œ ì œê±°ë  ê²ƒì´ë‹¤.) ë‹¹ì‹ ì€ hibernate.cache.provider_class 프로í¼í‹°ë¥¼ 사용하여 org.hibernate.cache.CacheProvider를 구현하는 í´ëž˜ìŠ¤ì˜ ì´ë¦„ì„ ì§€ì •í•¨ìœ¼ë¡œì¨ ë‹¤ë¥¸ êµ¬í˜„ì„ ì„ íƒí•  ìˆ˜ë„ ìžˆë‹¤. + You have the option to tell Hibernate which caching implementation to use by + specifying the name of a class that implements org.hibernate.cache.CacheProvider + using the property hibernate.cache.provider_class. Hibernate + comes bundled with a number of built-in integrations with open-source cache providers + (listed below); additionally, you could implement your own and plug it in as + outlined above. Note that versions prior to 3.2 defaulted to use EhCache as the + default cache provider; that is no longer the case as of 3.2. + ë‹¹ì‹ ì€ hibernate.cache.provider_class 프로í¼í‹°ë¥¼ 사용하여 + org.hibernate.cache.CacheProvider를 구현하는 í´ëž˜ìŠ¤ì˜ ì´ë¦„ì„ ì§€ì •í•¨ìœ¼ë¡œì¨ ì–´ëŠ ìºì‹± êµ¬í˜„ì„ + 사용할 것ì¸ì§€ë¥¼ Hibernateì—게 알려주는 ì˜µì…˜ì„ ê°–ëŠ”ë‹¤. Hibernate는 (ì•„ëž˜ì— ì—´ê±°ëœ) 오픈-소스 프로바ì´ë”ë“¤ì„ ê°€ì§„ + ë§Žì€ ë¹Œë“œë˜ì–´ 있는 í†µí•©ë“¤ì„ ë²ˆë“¤ë¡œ ê°–ê³  있다; 추가ì ìœ¼ë¡œ ë‹¹ì‹ ì€ ìœ„ì—ì„œ ì–¸ê¸‰í–ˆë“¯ì´ ê·¸ê²ƒì— ë‹¹ì‹  ìžì‹ ì˜ ê²ƒì„ êµ¬í˜„í•  수 있고 ê·¸ê²ƒì— + 플러그 시킬 수 있다. 3.2 ì´ë²ˆ ë²„ì „ë“¤ì€ ë””í”ŒíŠ¸ ìºì‹œ 프로바ì´ë”로서 EhCache를 사용하ë„ë¡ ë””í¬ë¦ë¡œ 내장ë˜ì–´ 있ìŒì„ 노트하ë¼; + 버전 3.2ì˜ ê²½ìš°ì— ê·¸ê²ƒì€ ë”ì´ìƒ ë””í´íŠ¸ ë‚´ìž¥ì´ ì•„ë‹ˆë‹¤.
diff --git a/reference/ko/modules/persistent_classes.xml b/reference/ko/modules/persistent_classes.xml index 31189060d2..5559436185 100644 --- a/reference/ko/modules/persistent_classes.xml +++ b/reference/ko/modules/persistent_classes.xml @@ -104,6 +104,7 @@ public class Cat { 준수할 네 ê°œì˜ ì£¼ìš” ê·œì¹™ë“¤ì´ ë‹¤ìŒì— 있다: + 아규먼트 없는 ìƒì„±ìžë¥¼ êµ¬í˜„í•˜ë¼ @@ -228,7 +229,8 @@ public class DomesticCat extends Cat { <literal>equals()</literal>와 <literal>hashCode()</literal> 구현하기 - ë§Œì¼ ë‹¹ì‹ ì´ + ë§Œì¼ ë‹¹ì‹ ì´ ë‹¤ìŒì˜ 경우ë¼ë©´, ë‹¹ì‹ ì€ equals()와 hashCode() + ë©”ì†Œë“œë“¤ì„ ì˜¤ë²„ë¼ì´ë“œ 시켜야 한다. @@ -244,10 +246,7 @@ public class DomesticCat extends Cat { - - ê²½ìš°ì— ë‹¹ì‹ ì€ equals()와 hashCode() ë©”ì†Œë“œë“¤ì„ ì˜¤ë²„ë¼ì´ë“œ 시켜야 한다. - - + Hibernate는 특정 session 범위 ë‚´ì—서만 persistent identity(ë°ì´í„°ë² ì´ìŠ¤ í–‰)ê³¼ Java identityì˜ ê°™ìŒì„ 보장한다. ë”°ë¼ì„œ 우리가 다른 세션들ì—ì„œ ê²€ìƒ‰ëœ ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 혼합시키ìžë§ˆìž, 우리가 Setë“¤ì— ëŒ€í•´ 유ì˜ë¯¸í•˜ê²Œ @@ -432,7 +431,7 @@ dynamicSession.close() - + Tuplizer들 @@ -442,8 +441,8 @@ dynamicSession.close() 그런 ë°ì´í„° 구조로부터 ê°’ë“¤ì„ ì¶”ì¶œì‹œí‚¤ëŠ” 방법 그리고 그런 ë°ì´í„°êµ¬ì¡° ì†ìœ¼ë¡œ ê°’ë“¤ì„ ì‚½ìž…ì‹œí‚¤ëŠ” ë°©ë²•ì„ ì•Œê³  있는 것ì´ë‹¤. 예를 들어, POJO 엔티티 ëª¨ë“œì˜ ê²½ìš°, 대ì‘하는 tuplizer는 ê·¸ê²ƒì˜ ìƒì„±ìžë¥¼ 통해 POJO를 ìƒì„±ì‹œí‚¤ëŠ” 방법, 그리고 ì •ì˜ëœ 프로í¼í‹° ì ‘ê·¼ìžë“¤ì„ 사용하여 POJO 프로í¼í‹°ë“¤ì— 접근하는 ë°©ë²•ì„ ì•ˆë‹¤. - org.hibernate.tuple.EntityTuplizer ì¸í„°íŽ˜ì´ìŠ¤ì™€ - org.hibernate.tuple.ComponentTuplizer ì¸í„°íŽ˜ì´ìŠ¤ì— ì˜í•´ 표현ë˜ëŠ” ë‘ ê°€ì§€ 고급 ìœ í˜•ì˜ + org.hibernate.tuple.entity.EntityTuplizer ì¸í„°íŽ˜ì´ìŠ¤ì™€ + org.hibernate.tuple.component.ComponentTuplizer ì¸í„°íŽ˜ì´ìŠ¤ì— ì˜í•´ 표현ë˜ëŠ” ë‘ ê°€ì§€ 고급 ìœ í˜•ì˜ Tuplizerë“¤ì´ ì¡´ìž¬í•œë‹¤. EntityTuplizerë“¤ì€ ì—”í‹°í‹°ë“¤ì— ê´€í•´ì„œëŠ” ìœ„ì— ì–¸ê¸‰ëœ ê³„ì•½ë“¤ì„ ë§¤í•‘í•  ì±…ìž„ì´ ìžˆëŠ” 반면ì—, ComponentTuplizerë“¤ì€ ì»´í¬ë„ŒíŠ¸ë“¤ì— ëŒ€í•´ì„œë„ ë™ì¼í•œ ê²ƒì„ í–‰í•œë‹¤. @@ -476,7 +475,7 @@ dynamicSession.close() public class CustomMapTuplizerImpl - extends org.hibernate.tuple.DynamicMapEntityTuplizer { + extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer { // override the buildInstantiator() method to plug in our custom map... protected final Instantiator buildInstantiator( org.hibernate.mapping.PersistentClass mappingInfo) { diff --git a/reference/ko/modules/query_criteria.xml b/reference/ko/modules/query_criteria.xml index 63ca6b6b59..614f3026fc 100644 --- a/reference/ko/modules/query_criteria.xml +++ b/reference/ko/modules/query_criteria.xml @@ -364,7 +364,6 @@ session.createCriteria(Cat.class, "cat") - diff --git a/reference/ko/modules/query_hql.xml b/reference/ko/modules/query_hql.xml index f64d387072..9f4faafff4 100644 --- a/reference/ko/modules/query_hql.xml +++ b/reference/ko/modules/query_hql.xml @@ -1,5 +1,5 @@ - HQL: Hibernate Query Language + HQL: 하ì´ë²„네ì´íŠ¸ ì§ˆì˜ ì–¸ì–´(Hibernate Query Language) Hibernate는 (아주 ì˜ë„ì ìœ¼ë¡œ) SQLê³¼ 매우 í¡ì‚¬í•˜ê²Œ ë³´ì´ëŠ” 극히 강력한 ì§ˆì˜ ì–¸ì–´ë¥¼ 구비하고 있다. 그러나 ê·¸ êµ¬ë¬¸ì— ì˜í•´ 우롱당하지 ë§ë¼; @@ -126,7 +126,7 @@ 10.0]]> - + 게다가, "fetch" joinì€ ê°’ë“¤ì„ ê°€ì§„ 콜렉션들ì´ë‚˜ ì—°ê´€ê´€ê³„ë“¤ì´ í•œ ê°œì˜ select를 사용하여, ê·¸ê²ƒë“¤ì˜ ë¶€ëª¨ ê°ì²´ë“¤ì— ë”°ë¼ ì´ˆê¸°í™” ë˜ëŠ” ê²ƒì„ í—ˆìš©í•´ì¤€ë‹¤. ì´ê²ƒì€ ì½œë ‰ì…˜ì˜ ê²½ìš°ì— íŠ¹ížˆ 유용하다. ê·¸ê²ƒì€ ì—°ê´€ê´€ê³„ë“¤ê³¼ ì½œë ‰ì…˜ë“¤ì— ëŒ€í•œ 매핑 파ì¼ì˜ outer joinê³¼ lazy ì„ ì–¸ë“¤ì„ @@ -147,7 +147,7 @@ inner join fetch cat.mate left join fetch cat.kittens child left join fetch child.kittens]]> - + (ë¹„ë¡ scroll()ì´ ì‚¬ìš©ë  ìˆ˜ 있ì„지ë¼ë„) fetch 구조체는 iterate()를 사용하여 호출ë˜ëŠ” 질ì˜ë“¤ ë‚´ì— ì‚¬ìš©ë  ìˆ˜ ì—†ìŒì„ 노트하ë¼. ì´ë“¤ 오í¼ë ˆì´ì…˜ë“¤ì´ ê²°ê³¼ í–‰ë“¤ì— @@ -167,9 +167,9 @@ - + - + join êµ¬ë¬¸ì˜ í˜•ì‹ë“¤ @@ -564,6 +564,13 @@ where log.item.class = 'Payment' and log.item.id = payment.id]]>str() + + + cast(... as ...), 여기서 ë‘번 째 아규먼트는 Hibernate íƒ€ìž…ì˜ ì´ë¦„ì´ê³ , + ANSI cast()와 extract()ê°€ 기반 ë°ì´í„°ë² ì´ìŠ¤ì— ì˜í•´ + 지ì›ë  경우ì—는 extract(... from ...). + + ì¡°ì¸ëœ ì¸ë±ì‹±ëœ ì½œë ‰ì…˜ì˜ aliasë“¤ì— ì ìš©ë˜ëŠ”, HQL index() 함수 @@ -576,29 +583,10 @@ where log.item.class = 'Payment' and log.item.id = payment.id]]>size(), minelement(), maxelement(), minindex(), maxindex(). - - - cast(... as ...), 여기서 ë‘번 째 아규먼트는 Hibernate íƒ€ìž…ì˜ ì´ë¦„ì´ê³ , - ANSI cast()와 extract()ê°€ 기본 ë°ì´í„°ë² ì´ìŠ¤ì— ì˜í•´ 지ì›ë  경우ì—는 - extract(... from ...) - - - - - ì¡°ì¸ëœ ì¸ë±ì‹±ëœ ì½œë ‰ì…˜ì˜ aliasë“¤ì„ ì ìš©í•˜ëŠ” HQL index() 함수 - - - - - 콜렉션 ê°’ 경로 표현ì‹ë“¤ì„ 취하는 HQL 함수들: some, all, exists, any, inì„ ì‚¬ìš©í•˜ì—¬ - ì–‘ì´ í•œì •ë  ìˆ˜ 있는 특별한 elements() ë° indices 함수들과 함께 - size(), minelement(), maxelement(), minindex(), maxindex() 함수들. - - sign(), trunc(), rtrim(), - sin()ê³¼ ê°™ì´ ìž„ì˜ì˜ ë°ì´í„°ë² ì´ìŠ¤-ì§€ì› SQL ìŠ¤ì¹¼ë¼ í•¨ìˆ˜ + sin()ê³¼ ê°™ì´ ìž„ì˜ì˜ ë°ì´í„°ë² ì´ìŠ¤ ì§€ì› SQL ìŠ¤ì¹¼ë¼ í•¨ìˆ˜ @@ -867,6 +855,10 @@ from Cat as cat]]> select 리스트 ë‚´ì— ìžˆëŠ” 하나 ì´ìƒì˜ 표현ì‹ì„ 가진 서브질ì˜ë“¤ì˜ ê²½ìš°ì— ë‹¹ì‹ ì€ tuple ìƒì„±ìžë¥¼ 사용할 수 있다: + + + select ëª©ë¡ ë‚´ì— í•˜ë‚˜ ì´ìƒì˜ 표현ì‹ì„ 가진 서브질ì˜ë“¤ì˜ 경우, ë‹¹ì‹ ì€ íŠœí”Œ(tuple) 구조를 사용할 수 있다: + - Native SQL + Native SQL - - ë‹¹ì‹ ì€ ë˜í•œ ë‹¹ì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ì˜ native SQL dialectë¡œ 질ì˜ë“¤ì„ 표현할 ìˆ˜ë„ ìžˆë‹¤. ë‹¹ì‹ ì´ ì˜¤ë¼í´ì˜ ì§ˆì˜ ížŒíŠ¸ë“¤ ë˜ëŠ” - CONNECT 키워드와 ê°™ì€ ë°ì´í„°ë² ì´ìŠ¤ 지정ì ì¸ íŠ¹ì§•ë“¤ì„ í™œìš©í•˜ê³ ìž ì›í•  ê²½ìš°ì— ì´ê²ƒì´ 유용하다. - ê·¸ê²ƒì€ ë˜í•œ ì§ì ‘ì ì¸ SQL/JDBC ê¸°ë°˜ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„° Hibernateë¡œì˜ ë³´ë‹¤ 명료한 ì´ì „ 경로를 제공한다. - + ë‹¹ì‹ ì€ ë˜í•œ ë‹¹ì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ì˜ native SQL dialectë¡œ 질ì˜ë“¤ì„ 표현할 ìˆ˜ë„ ìžˆë‹¤. + ë‹¹ì‹ ì´ ì˜¤ë¼í´ì˜ ì§ˆì˜ ížŒíŠ¸ë“¤ ë˜ëŠ” CONNECT 키워드와 ê°™ì€ + ë°ì´í„°ë² ì´ìŠ¤ 지정ì ì¸ íŠ¹ì§•ë“¤ì„ í™œìš©í•˜ê³ ìž ì›í•  ê²½ìš°ì— ì´ê²ƒì´ 유용하다. + ê·¸ê²ƒì€ ë˜í•œ ì§ì ‘ì ì¸ SQL/JDBC ê¸°ë°˜ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ìœ¼ë¡œë¶€í„° Hibernateë¡œì˜ ë³´ë‹¤ 명료한 + ì´ì „ 경로를 제공한다. - - Hibernate3ì€ ë˜í•œ 모든 create, update, delete, load 오í¼ë ˆì´ì…˜ë“¤ì— 대해 (내장 í”„ë¡œì‹œì €ë“¤ì„ í¬í•¨í•˜ì—¬) ì†ìœ¼ë¡œ ìž‘ì„±ëœ SQLì„ - 지정하는 ê²ƒì„ ë‹¹ì‹ ì—게 허용해준다. - + Hibernate3ì€ ë˜í•œ 모든 create, update, delete, load 오í¼ë ˆì´ì…˜ë“¤ì— 대해 + (내장 í”„ë¡œì‹œì €ë“¤ì„ í¬í•¨í•˜ì—¬) ì†ìœ¼ë¡œ ìž‘ì„±ëœ SQLì„ ì§€ì •í•˜ëŠ” ê²ƒì„ ë‹¹ì‹ ì—게 허용해준다. - - <literal>SQLQuery</literal> 사용하기 + + <literal>SQLQuery</literal> 사용하기 - - native SQL 질ì˜ë“¤ì˜ ì‹¤í–‰ì€ SQLQuery ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 제어ë˜ë©°, ê·¸ê²ƒì€ - Session.createSQLQuery()ì„ í˜¸ì¶œí•˜ì—¬ íšë“ëœë‹¤. 극히 간단한 경우들ì—ì„œ , - 우리는 ë‹¤ìŒ í˜•ì‹ì„ 사용할 수 있다: - + native SQL 질ì˜ë“¤ì˜ ì‹¤í–‰ì€ SQLQuery ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 + 제어ë˜ë©°, ê·¸ê²ƒì€ Session.createSQLQuery()ì„ í˜¸ì¶œí•˜ì—¬ + íšë“ëœë‹¤. 다ìŒì€ ì´ API를 질ì˜ì— 사용하는 ë°©ë²•ì„ ì„¤ëª…í•œë‹¤. - - - ì´ ì§ˆì˜ëŠ” 다ìŒì„ 지정했다: + + ìŠ¤ì¹¼ë¼ ì§ˆì˜ë“¤ - + 가장 기본ì ì¸ SQL 질ì˜ëŠ” 스칼ë¼ë“¤(값들)ì˜ ëª©ë¡ì„ 얻는 + 것ì´ë‹¤. + + + + ì´ê²ƒë“¤ì€ 둘다 CATS í…Œì´ë¸” ë‚´ì— ìžˆëŠ” ê°ê°ì˜ ì»¬ëŸ¼ì— ëŒ€í•œ ìŠ¤ì¹¼ë¼ ê°’ë“¤ì„ ê°€ì§„ Object + ë°°ì—´ë“¤ì˜ List를 반환할 것ì´ë‹¤. Hibernate는 반환ë˜ëŠ” ìŠ¤ì¹¼ë¼ ê°’ë“¤ì˜ ì‹¤ì œ 순서와 íƒ€ìž…ë“¤ì„ + ë„ì¶œí•˜ëŠ”ë° ResultSetMetadata를 사용할 것ì´ë‹¤. + + ResultSetMetadata ì‚¬ìš©ì˜ ì˜¤ë²„í—¤ë“œë¥¼ 피하거나 + 간단하게는 반환ë˜ëŠ” ê²ƒì„ ë³´ë‹¤ 명시ì ì´ê²Œë” 하기 위해 우리는 + addScalar()를 사용할 수 있다. + + + + ì´ ì§ˆì˜ëŠ” 다ìŒì„ 지정했다: + + - - SQL ì§ˆì˜ ë¬¸ìžì—´ - + SQL ì§ˆì˜ ë¬¸ìžì—´ + - - ê·¸ 질ì˜ì— ì˜í•´ 반환ë˜ëŠ” 엔티티 - + 반환할 컬럼들과 타입들 - + - - 여기서, ê²°ê³¼ ì…‹ 컬럼 ì´ë¦„ë“¤ì€ ë§¤í•‘ 문서 ë‚´ì— ì§€ì •ëœ ì»¬ëŸ¼ ì´ë¦„들과 ë™ì¼í•œ 것으로 가정ëœë‹¤. ì´ê²ƒì€ ì¡°ì¸ ë‹¤ì¤‘ í…Œì´ë¸”ë“¤ì„ ê°€ì§„ - SQL 질ì˜ë“¤ì— 대해 문제가 ë  ìˆ˜ 있다. 왜ëƒí•˜ë©´ ë™ì¼í•œ 컬럼 ì´ë¦„ë“¤ì´ í•˜ë‚˜ ì´ìƒì˜ í…Œì´ë¸” 들 ë‚´ì— ë‚˜íƒ€ë‚  ìˆ˜ë„ ìžˆê¸° 때문ì´ë‹¤. - ë‹¤ìŒ í˜•ì‹ì€ 컬럼 ì´ë¦„ ì¤‘ë³µì— ëŒ€í•´ 취약하지 않다: - + ì´ê²ƒì€ 여전히 Object ë°°ì—´ë“¤ì„ ë°˜í™˜í•  것ì´ì§€ë§Œ, ì´ì œ ê·¸ê²ƒì€ + ResultSetMetdata를 사용하지 ì•Šì„ ê²ƒì´ê³  ëŒ€ì‹ ì— + 기반 결과셋으로부터 ID, NAME 그리고 BIRTHDATE ì»¬ëŸ¼ì„ ê°ê° Long, String + 그리고 Short 타입으로 반환할 것ì´ë‹¤. 심지어 ê·¸ 질ì˜ê°€ *를 + 사용하고 세 ê°œì˜ ì—´ê±°ëœ ì»¬ëŸ¼ë“¤ 보다 ë” ë§Žì€ ê²ƒì„ ë°˜í™˜í•  수 있ì„지ë¼ë„, ì´ê²ƒì€ + ë˜í•œ ì˜¤ì§ ì´ë“¤ 세 ê°œì˜ ì»¬ëŸ¼ë“¤ ë§Œì´ ë°˜í™˜ë  ê²ƒìž„ì„ ì˜ë¯¸í•œë‹¤. - + 스칼ë¼ë“¤ 중 몇몇 ë˜ëŠ” ì „ë¶€ì— ëŒ€í•œ 타입 정보를 남겨ë‘는 ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤. + + + + ì´ê²ƒì€ 본질ì ìœ¼ë¡œ ì•žì˜ ê²ƒê³¼ ë™ì¼í•œ 질ì˜ì´ì§€ë§Œ, ì´ì œ + ResultSetMetaData는 IDì˜ íƒ€ìž…ì´ ëª…ì‹œì ìœ¼ë¡œ 지정ë˜ì–´ 있으므로 + NAMEê³¼ BIRTHDATEì˜ íƒ€ìž…ì„ ê²°ì •í•˜ëŠ”ë° ì‚¬ìš©ëœë‹¤. + + java.sql.Types returned from ResultSetMetaDataì´ Hibernate + 타입들로 매핑ë˜ëŠ” ë°©ë²•ì€ Dialectì— ì˜í•´ 제어ëœë‹¤. ë§Œì¼ íŠ¹ì • íƒ€ìž…ì´ ë§¤í•‘ë˜ì§€ 않거나 + 예ìƒë˜ëŠ” 타입으로 귀결ë˜ì§€ ì•Šì„ ê²½ìš°ì— Dialect ë‚´ì— ìžˆëŠ” + registerHibernateTypeì— ëŒ€í•œ í˜¸ì¶œë“¤ì„ í†µí•´ ê·¸ê²ƒì„ + 맞춤화 시키는 ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤. + + + + Entity 질ì˜ë“¤ + + ìœ„ì˜ ì§ˆì˜ë“¤ì€ ìŠ¤ì¹¼ë¼ ê°’ë“¤ì„ ë°˜í™˜í•˜ëŠ” 것, 결과셋들로부터 "ì›ëž˜ì˜" ê°’ë“¤ì„ + 기본ì ìœ¼ë¡œ 반환하는 ê²ƒì— ëŒ€í•œ 전부였다. 다ìŒì€ addEntity()를 + 통해 native sql 질ì˜ë¡œë¶€í„° 엔티티 ê°ì²´ë“¤ì„ 얻는 ë°©ë²•ì„ ë³´ì—¬ì¤€ë‹¤. + + ì´ ì§ˆì˜ëŠ” 다ìŒì„ 지정했다: - + - - Hibernateê°€ 컬럼 aliasë“¤ì„ ë„입하기 위한, placeholder를 가진, SQL ì§ˆì˜ ë¬¸ìžì—´ - + SQL ì§ˆì˜ ë¬¸ìžì—´ + - - ê·¸ 질ì˜ì— ì˜í•´ ë°˜í™˜ëœ ì—”í‹°í‹°ì™€ ê·¸ê²ƒì˜ SQL í…Œì´ë¸” alias - + ê·¸ 질ì˜ì— ì˜í•´ 반환ë˜ëŠ” 엔티티 - - - - addEntity() 메소드는 SQL í…Œì´ë¸” alias를 ë°˜í™˜ëœ ì—”í‹°í‹° í´ëž˜ìŠ¤ì™€ 연관지우고, - ì§ˆì˜ ê²°ê³¼ ì…‹ì˜ í˜•íƒœë¥¼ 결정한다. - - - - addJoin() 메소드는 다른 엔티티들과 ì½œë ‰ì…˜ë“¤ì— ëŒ€í•œ ì—°ê´€ë“¤ì„ ë¡œë“œì‹œí‚¤ëŠ”ë° ì‚¬ìš©ë  ìˆ˜ 있다. - - - - - - native SQL 질ì˜ëŠ” 간단한 ìŠ¤ì¹¼ë¼ ê°’ì„ ë°˜í™˜í•˜ê±°ë‚˜ 스칼ë¼ë“¤ê³¼ ì—”í‹°í‹°ë“¤ì˜ ì¡°í•©ì„ ë°˜í™˜í•  ìˆ˜ë„ ìžˆë‹¤. - + - - - ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ hbm 파ì¼ë“¤ ë‚´ì— ê²°ê³¼ì…‹ 매핑 정보를 대안저ê¸ë¡œ 설명활 수 있고 ë‹¹ì‹ ì˜ ì§ˆì˜ë“¤ì„ 위해 ê·¸ê²ƒë“¤ì„ - 사용할 수 있다. + Catì´ ì»¬ëŸ¼ ID, NAME 그리고 BIRTHDATE로서 매핑ëœë‹¤ê³  가정하면, + ìœ„ì˜ ì§ˆì˜ë“¤ì€ 둘다 ê°ê°ì˜ 요소가 í•˜ë‚˜ì˜ Cat ì—”í‹°í‹°ì¸ í•˜ë‚˜ì˜ List를 반환할 것ì´ë‹¤. - + ë§Œì¼ ê·¸ 엔티티가 ë˜ ë‹¤ë¥¸ ì—”í‹°í‹°ì— ëŒ€í•´ many-to-oneë¡œ + 매핑ë˜ì–´ 있다면 ë˜í•œ native 질ì˜ë¥¼ 실행할 ë•Œ ì´ê²ƒì„ 반환하는 ê²ƒì´ í•„ìˆ˜ì ê³ , ê·¸ ë°–ì˜ ê²½ìš° + ë°ì´í„°ë² ì´ìŠ¤ 지정ì ì¸ "ì»¬ëŸ¼ì´ ë°œê²¬ë˜ì§€ 않았습니다" 오류가 ì¼ì–´ë‚  것ì´ë‹¤. 추가ì ì¸ + ì»¬ëŸ¼ì€ * 표기를 사용할 ìžë™ì ìœ¼ë¡œ ë°˜í™˜ë  ê²ƒì´ì§€ë§Œ, 우리는 ë‹¤ìŒ Dogì— + 대한 many-to-one 예제ì—서처럼 명시ì ì¸ ê²ƒì„ ë” ì„ í˜¸í•œë‹¤: - + - - Alias 참조와 프로í¼í‹° 참조 + ì´ê²ƒì€ cat.getDog()ì´ ê³ ìœ í•˜ê²Œ 기능하는 ê²ƒì„ í—ˆìš©í•œë‹¤. + - - 위ì—ì„œ ì‚¬ìš©ëœ {cat.*} 표기는 "모든 프로í¼í‹°"ì— ëŒ€í•œ 약어ì´ë‹¤. 다른 방법으로, ë‹¹ì‹ ì€ ëª…ì‹œì ìœ¼ë¡œ ì»¬ëŸ¼ë“¤ì„ - 리스트할 수 있지만, 심지어 ì´ ê²½ìš° ì¡°ì°¨ë„ ìš°ë¦¬ëŠ” Hibernateë¡œ 하여금 ê°ê°ì˜ 프로í¼í‹°ì— 대해 SQL 컬럼 aliasë“¤ì„ ë¼ì›Œë„£ë„ë¡ í•´ì•¼ 한다. - 컬럼 aliasì— ëŒ€í•œ placeholder는 í…Œì´ë¸” alias 수ì‹ì–´ê°€ ë¶™ì€ í”„ë¡œí¼í‹° ì´ë¦„ì´ë‹¤. ë‹¤ìŒ ì˜ˆì œì—ì„œ, 우리는 매핑 메타ë°ì´í„°ì— ì„ ì–¸ëœ - ê²ƒì— ëŒ€í•´ 다른 í…Œì´ë¸” (cat_log)로부터 Catë“¤ì„ ê²€ìƒ‰í•œë‹¤. 우리는 심지어 우리가 - 좋아할 경우 where ì ˆ ì†ì— 프로í¼í‹° aliasë“¤ì„ ì‚¬ìš©í•  ìˆ˜ë„ ìžˆìŒì„ 주목하ë¼. - - - The {}-syntax is not required for named queries. - See - - - + 연관들과 ì½œë ‰ì…˜ë“¤ì„ ì²˜ë¦¬í•˜ê¸° + + 프ë½ì‹œë¥¼ 초기화 ì‹œí‚´ì— ìžˆì–´ 가능한 특별한 ë¼ìš´ë“œíŠ¸ë¦½ì„ 피하기 위해서 + Dogì—ì„œ eagerly join시키는 ê²ƒì´ ê°„ìœ¼í•˜ë‹¤. ì´ê²ƒì€ + addJoin() 메소드를 통해 행해지는ë°, ê·¸ê²ƒì€ + ì—°ê´€ì´ë‚˜ 콜렉션 ë‚´ì—ì„œ ì¡°ì¸ì‹œí‚¤ëŠ” ê²ƒì„ ë‹¹ì‹ ì—게 허용해준다. + + + + ì´ ì˜ˆì œì—ì„œ 반환ë˜ëŠ” Catë“¤ì€ ë°ì´í„°ë² ì´ìŠ¤ì— + 대한 ìž„ì˜ì˜ 특별한 ë¼ìš´ë“œí¬ë¦½ ì—†ì´ ì „ì²´ì ìœ¼ë¡œ ì´ˆê¸°í™”ëœ ê·¸ê²ƒë“¤ì˜ dog + 프로í¼í‹°ë¥¼ 갖는다. 우리가 joinì˜ ëŒ€ìƒ í”„ë¡œí¼í‹° 경로를 지정하는 ê²ƒì„ ê°€ëŠ¥í•˜ë„ë¡ í•˜ê¸° 위해 + í•˜ë‚˜ì˜ alias ì´ë¦„("cat")ì„ ì¶”ê°€í–ˆìŒì„ 주지하ë¼. ëŒ€ì‹ ì— ì˜ˆë¥¼ 들어 Catì´ + Dogì— ëŒ€í•´ one-to-many를 가질 경우, ì½œë ‰ì…˜ë“¤ì— ëŒ€í•´ ë™ì¼í•œ eager joiningì„ + 행하는 ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤. + + + +

ì´ ë‹¨ê³„ì—ì„œ 우리는 Hibernateì—ì„œ native 질ì˜ë“¤ì„ 사용가능하ë„ë¡ ë§Œë“¤ê¸° 위해 + sql 질ì˜ë“¤ì„ 강화시키지는 ê²ƒì„ ì‹œìž‘í•˜ì§€ ì•Šê³ ì„œë„ native 질ì˜ë“¤ë¡œì„œ 가능한 ê²ƒì˜ í•œê³„ì— + ë„달하고 있다; 문제ì ë“¤ì€ ë™ì¼í•œ íƒ€ìž…ì˜ ì—¬ëŸ¬ ì—”í‹°í‹°ë“¤ì„ ë°˜í™˜í•  ë•Œ ë˜ëŠ” ë””í´íŠ¸ alias/column + ì´ë¦„ë“¤ì´ ì¶©ë¶„í•˜ì§€ ì•Šì„ ë•Œ ë°œìƒí•˜ê¸° 시작한다.

+ + + + 여러 ê°œì˜ ì—”í‹°í‹°ë“¤ì„ ë°˜í™˜í•˜ê¸° + + 지금까지 ê²°ê³¼ ì…‹ 컬럼 ì´ë¦„ë“¤ì€ ë§¤í•‘ 문서 ë‚´ì— ì§€ì •ëœ ì»¬ëŸ¼ ì´ë¦„들과 ë™ì¼í•˜ë‹¤ê³  가정ë˜ì–´ 있다. + ë™ì¼í•œ ì»¬ëŸ¼ì´ í•˜ë‚˜ ì´ìƒì˜ í…Œì´ë¸” ë‚´ì—ì„œ 나타날 수 있기 때문ì—, ì´ê²ƒì€ 여러 ê°œì˜ í…Œì´ë¸”ë“¤ì„ ì¡°ì¸ì‹œí‚¤ëŠ” + SQL 질ì˜ë“¤ì— 대해 문제가 ë  ìˆ˜ 있다. + + 컬럼 alias ì£¼ìž…ì€ ë‹¤ìŒ ì§ˆì˜(아마 실패할 것ì´ë‹¤)ì—ì„œ 필요하다: + + + + ì´ ì§ˆì˜ì˜ 목ì ì€ 단위 í–‰ 당 ë‘ ê°œì˜ Cat ì¸ìŠ¤í„´ìŠ¤ë“¤, í•˜ë‚˜ì˜ cat 그리고 ê·¸ê²ƒì˜ mother를 + 반환하는 것ì´ë‹¤. 왜ëƒí•˜ë©´ ê·¸ê²ƒë“¤ì´ ë™ì¼í•œ 컬럼 ì´ë¦„들로 매핑ë˜ì–´ 있기 ë•Œë¬¸ì— ì´ê²ƒì€ 실패할 것ì´ê³  + ë°ì´ë² ì´ìŠ¤ ìƒì—ì„œ ë°˜í™˜ëœ ì»¬ëŸ¼ aliasë“¤ì€ ì•„ë§ˆ 매핑들 ë‚´ì— ì§€ì •ëœ ì»¬ëŸ¼ë“¤("ID" 와 "NAME")ê³¼ 같지 ì•Šì€ + "c.ID", "c.NAME" ë“±ì˜ í˜•ì‹ì¼ 것ì´ë‹¤. + + ë‹¤ìŒ í˜•ì‹ì€ 컬럼 ì´ë¦„ 중복 취약ì ì„ 갖지 않는다: + + + + ì´ ì§ˆì˜ëŠ” 다ìŒì„ 지정했다: + + + + 컬럼 aliasë“¤ì„ ì£¼ìž…í•˜ê¸° 위한 Hibernateìš© placeholderë“¤ì„ ê°€ì§„ SQL ì§ˆì˜ ë¬¸ìžì—´ + + + + ê·¸ 질ì˜ì— ì˜í•´ 반환ë˜ëŠ” 엔티티들 + + + + ìœ„ì— ì‚¬ìš©ëœ {cat.*} ê³¼ {mother.*} 표기는 "모든 프로í¼í‹°ë“¤"ì— ëŒ€í•œ ìƒëžµì´ë‹¤. + 다른 방법으로 ë‹¹ì‹ ì€ ì»¬ëŸ¼ë“¤ì„ ëª…ì‹œì ìœ¼ë¡œ ì—´ê±°í•  ìˆ˜ë„ ìžˆì§€ë§Œ, ì´ ê²½ìš°ì— ìš°ë¦¬ëŠ” Hibernateë¡œ 하여금 + SQL 컬럼 aliasë“¤ì„ ê°ê°ì˜ ì»¬ëŸ¼ì— ì£¼ìž…ì‹œí‚¤ë„ë¡ ê°•ì œí•œë‹¤. 컬럼 alias를 위한 placeholder는 단지 + ê·¸ í…Œì´ë¸” aliasì— ì˜í•´ 수ì‹ëœ 프로í¼í‹° ì´ë¦„ì´ë‹¤. ë‹¤ìŒ ì˜ˆì œì—ì„œ, 우리는 다른 í…Œì´ë¸”(cat_log)로부터 + 매핑 메타ë°ì´í„° ë‚´ì— ì„ ì–¸ëœ ê²ƒìœ¼ë¡œì˜ Cat들과 ê·¸ê²ƒë“¤ì˜ motherë“¤ì„ ê²€ìƒ‰í•œë‹¤. 우리는 우리가 좋다면 + 심지어 where ì ˆ ë‚´ì— í”„ë¡œí¼í‹° alias를 사용할 ìˆ˜ë„ ìžˆìŒì„ 주지하ë¼. + + + .addEntity("cat", Cat.class) + .addEntity("mother", Cat.class).list() +]]>
- - 노트: ë§Œì¼ ë‹¹ì‹ ì´ ê°ê°ì˜ 프로í¼í‹°ë¥¼ 명시ì ìœ¼ë¡œ 리스트할 경우, ë‹¹ì‹ ì€ ê·¸ í´ëž˜ìŠ¤ì™€ - ê·¸ê²ƒì˜ ì„œë¸Œí´ëž˜ìŠ¤ë“¤ì˜ 모든 프로í¼í‹°ë“¤ì„ í¬í•¨í•´ì•¼ 한다! - - - ë‹¤ìŒ í…Œì´ë¸”ì€ alias injectionì„ ì‚¬ìš©í•˜ëŠ” 다른 ê°€ëŠ¥ì„±ë“¤ì„ ë³´ì—¬ì¤€ë‹¤. 노트 : ê²°ê³¼ ë‚´ì—ì„œ alias ì´ë¦„ë“¤ì´ ì˜ˆì œë“¤ì´ë©°, ê°ê°ì˜ alias는 - ì‚¬ìš©ë  ì‹œì— í•˜ë‚˜ì˜ ìœ ì¼í•œ 그리고 가능한 다른 ì´ë¦„ì„ ê°€ì§ˆ 것ì´ë‹¤. - + + alias 참조와 프로í¼í‹° 참조 -
- Alias injection ì´ë¦„들 + ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì— ìœ„ì˜ alias ì£¼ìž…ì´ í•„ìš”í•˜ì§€ë§Œ, composite 프로í¼í‹°ë“¤, ìƒì† íŒë³„ìžë“¤ + (inheritance discriminators), 콜렉션 등과 ê°™ì€ ë³´ë‹¤ 복잡한 매핑들과 ê´€ë ¨ëœ ì§ˆì˜ë“¤ì˜ 경우ì—는 + 고유한 aliasë“¤ì„ ì£¼ìž…ì‹œí‚¤ëŠ” ê²ƒì„ Hibernateì—게 í—ˆìš©í•˜ëŠ”ë° ì‚¬ìš©ë  ëª‡ëª‡ 특별한 aliasë“¤ì´ ì¡´ìž¬í•œë‹¤. + + ë‹¤ìŒ í…Œì´ë¸”ì€ alias ì£¼ìž…ì„ ì‚¬ìš©í•˜ëŠ” 다른 ê°€ëŠ¥ì„±ë“¤ì„ ë³´ì—¬ì¤€ë‹¤. 노트: ê²°ê³¼ ë‚´ì— ìžˆëŠ” alias ì´ë¦„ë“¤ì´ + 예제ì´ë©°, ê°ê°ì˜ alias는 ì‚¬ìš©ë  ë•Œ í•˜ë‚˜ì˜ ìœ ì¼í•œ ì´ë¦„ê³¼ 아마 다른 ì´ë¦„ì„ ê°€ì§ˆ 것ì´ë‹¤. - - - - - - - - - - 설명 - 구문 - 예제 - - - - - 간단한 프로í¼í‹° - {[aliasname].[propertyname] - A_NAME as {item.name} - - - composite 프로í¼í‹° - {[aliasname].[componentname].[propertyname]} - CURRENCY as {item.amount.currency}, VALUE as {item.amount.value} - - - ì—”í‹°í‹°ì˜ íŒë³„ìž(Discriminator) - {[aliasname].class} - DISC as {item.class} - - - ì—”í‹°í‹°ì˜ ëª¨ë“  프로í¼í‹°ë“¤ - {[aliasname].*} - {item.*} - - - 콜렉션 키 - {[aliasname].key} - ORGID as {coll.key} - - - ì½œë ‰ì…˜ì˜ id - {[aliasname].id} - EMPID as {coll.id} - - - ì½œë ‰ì…˜ì˜ ìš”ì†Œ - {[aliasname].element} - XID as {coll.element} - - - - 콜렉션 ë‚´ì— ìžˆëŠ” ìš”ì†Œì˜ í”„ë¡œí¼í‹° - {[aliasname].element.[propertyname]} - NAME as {coll.element.name} - - - - 콜렉션 ë‚´ì— ìžˆëŠ” ìš”ì†Œì˜ ëª¨ë“  프로í¼í‹°ë“¤ - {[aliasname].element.*} - {coll.element.*} - - - ì½œë ‰ì…˜ì˜ ëª¨ë“  프로í¼í‹°ë“¤ - {[aliasname].*} - {coll.*} - - - -
+ + alias 주입 ì´ë¦„들 - + + + + + + + + + + 설명 + + 구문 + + 예제 + + + + + + 간단한 프로í¼í‹° + {[aliasname].[propertyname] + + A_NAME as {item.name} + + + + composite 프로í¼í‹° + + {[aliasname].[componentname].[propertyname]} + + CURRENCY as {item.amount.currency}, VALUE as {item.amount.value} + + + + ì—”í‹°í‹°ì˜ íŒë³„ìž(Discriminator) + {[aliasname].class} + + DISC as {item.class} + + + + ì—”í‹°í‹°ì˜ ëª¨ë“  프로í¼í‹°ë“¤ + {[aliasname].*} + + {item.*} + + + + 콜렉션 키 + {[aliasname].key} + + ORGID as {coll.key} + + + + ì½œë ‰ì…˜ì˜ id + {[aliasname].id} + + EMPID as {coll.id} + + + + ì½œë ‰ì…˜ì˜ ìš”ì†Œ + {[aliasname].element} + + XID as {coll.element} + + + + + 콜렉션 ë‚´ì— ìžˆëŠ” ìš”ì†Œì˜ í”„ë¡œí¼í‹° + {[aliasname].element.[propertyname]} + + NAME as {coll.element.name} + + + + 콜렉션 ë‚´ì— ìžˆëŠ” ìš”ì†Œì˜ ëª¨ë“  프로í¼í‹°ë“¤ + {[aliasname].element.*} + + {coll.element.*} + + + + ì½œë ‰ì…˜ì˜ ëª¨ë“  프로í¼í‹°ë“¤ + {[aliasname].*} + + {coll.*} + + + +
+ +
+ + + non-managed ì—”í‹°í‹°ë“¤ì„ ë°˜í™˜í•˜ê¸° + + native sql 질ì˜ì— ResultTransformer를 ì ìš©í•˜ëŠ” ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤. 예를 들어 + non-managed ì—”í‹°í‹°ë“¤ì„ ë°˜í™˜í•˜ê¸° 위해 ResultTransformer를 허용하는 것. + + + + ì´ ì§ˆì˜ëŠ” 다ìŒì„ 지정했다: + + + + SQL ì§ˆì˜ ë¬¸ìžì—´ + + + + ê²°ê³¼ 변환ìž(transformer) + + + + + ìœ„ì˜ ì§ˆì˜ëŠ” 초기화ë˜ì–´ 있고 NAMEê³¼ BIRTHNAMEì˜ ê°’ë“¤ì„ CatDTOì˜ + 대ì‘하는 프로í¼í‹°ë“¤ê³¼ 필드들 ì†ìœ¼ë¡œ 주입시킨 CatDTOì˜ ë¦¬ìŠ¤íŠ¸ë¥¼ 반환할 것ì´ë‹¤. + + + + + ìƒì† 처리하기 + + ìƒì†ì˜ 부분으로서 매핑ë˜ëŠ” ì—”í‹°í‹°ë“¤ì„ ì§ˆì˜í•˜ëŠ” native sql 질ì˜ë“¤ì€ baseclassì˜ + 모든 프로í¼í‹°ë“¤ì„ í¬í•¨í•´ì•¼ 하고 ê·¸ 모든 ê²ƒì´ ì„œë¸Œí´ëž˜ìŠ¤í™” ë˜ì–´ì•¼ 한다. + + + + 파ë¼ë¯¸í„°ë“¤ + + Native sql 질ì˜ë“¤ì€ 위치 파ë¼ë¯¸í„°ë“¤ ë¿ë§Œ ì•„ë‹ˆë¼ ëª…ëª…ëœ íŒŒë¼ë¯¸í„°ë“¤ì„ 지ì›í•œë‹¤: + + + + + + + ëª…ëª…ëœ SQL 질ì˜ë“¤ @@ -219,7 +369,7 @@ List loggedCats = sess.createSQLQuery(sql) addEntity() í˜¸ì¶œì„ í•„ìš”ë¡œ 하지 않는다. - + SELECT person.NAME AS {person.name}, person.AGE AS {person.age}, @@ -228,16 +378,17 @@ List loggedCats = sess.createSQLQuery(sql) WHERE person.NAME LIKE :namePattern ]]> - - - The <return-join> 요소와 <load-collection> - 요소는 ì—°ê´€ë“¤ì„ ì¡°ì¸ì‹œí‚¤ê³  ì½œë ‰ì…˜ë“¤ì„ ê°ê° 초기화 시키는 질ì˜ë“¤ì„ ì •ì˜í•˜ëŠ”ë° ì‚¬ìš©ëœë‹¤. - + + <return-join> 요소와 + <load-collection> + 요소는 ì—°ê´€ë“¤ì„ ì¡°ì¸ì‹œí‚¤ê³  ì½œë ‰ì…˜ë“¤ì„ ê°ê° 초기화 시키는 질ì˜ë“¤ì„ + ì •ì˜í•˜ëŠ”ë° ì‚¬ìš©ëœë‹¤. - + SELECT person.NAME AS {person.name}, @@ -253,12 +404,11 @@ List loggedCats = sess.createSQLQuery(sql) WHERE person.NAME LIKE :namePattern ]]> - - ëª…ëª…ëœ SQL 질ì˜ëŠ” ìŠ¤ì¹¼ë¼ ê°’ì„ ë°˜í™˜í• ìˆ˜ë„ ìžˆë‹¤. ë‹¹ì‹ ì€ <return-scalar> 요소를 사용하여 - 컬럼 alias와 Hibernate íƒ€ìž…ì„ ì„ ì–¸í•´ì•¼ 한다: - + ëª…ëª…ëœ SQL 질ì˜ëŠ” ìŠ¤ì¹¼ë¼ ê°’ì„ ë°˜í™˜í• ìˆ˜ë„ ìžˆë‹¤. ë‹¹ì‹ ì€ + <return-scalar> 요소를 사용하여 + 컬럼 alias와 Hibernate íƒ€ìž…ì„ ì„ ì–¸í•´ì•¼ 한다: - + SELECT p.NAME AS name, @@ -288,16 +438,23 @@ List loggedCats = sess.createSQLQuery(sql) WHERE person.NAME LIKE :namePattern ]]> - - 명시ì ìœ¼ë¡œ column/alias ì´ë¦„ë“¤ì„ ì§€ì •í•˜ëŠ”ë° return-property 사용하기 + 다른방법으로 ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ hbm 파ì¼ë“¤ ë‚´ì— ì§ì ‘ ìžë°” 코드로 ëœ ê²°ê³¼ì…‹ 매핑 정보를 사용할 수 있다. + + + + + 명시ì ìœ¼ë¡œ column/alias ì´ë¦„ë“¤ì„ ì§€ì •í•˜ëŠ”ë° return-property 사용하기 + + Hibernateë¡œ 하여금 그것 ìžì‹ ì˜ aliasë“¤ì„ ë¼ì›Œë„£ë„ë¡ í•˜ê¸° 위해 + {}-êµ¬ë¬¸ì„ ì‚¬ìš©í•˜ëŠ” 것 대신ì—, + <return-property>로서 ë‹¹ì‹ ì€ ì‚¬ìš©í•  + 컬럼 aliasë“¤ì´ ë¬´ì—‡ì¸ì§€ë¥¼ Hibernateì—게 명시ì ìœ¼ë¡œ 알려줄 수 있다. - - Hibernateë¡œ 하여금 그것 ìžì‹ ì˜ aliasë“¤ì„ ë¼ì›Œë„£ë„ë¡ í•˜ê¸° 위해 {}-êµ¬ë¬¸ì„ ì‚¬ìš©í•˜ëŠ” 것 대신ì—, - <return-property>로서 ë‹¹ì‹ ì€ ì‚¬ìš©í•  컬럼 aliasë“¤ì´ ë¬´ì—‡ì¸ì§€ë¥¼ Hibernateì—게 명시ì ìœ¼ë¡œ - 알려줄 수 있다. - - - + @@ -310,12 +467,11 @@ List loggedCats = sess.createSQLQuery(sql) ]]> - - <return-property>는 ë˜í•œ 다중 ì»¬ëŸ¼ë“¤ì— ëŒ€í•´ ë™ìž‘한다. ì´ê²ƒì€ 다중-컬럼 프로í¼í‹°ë“¤ì— - 대한 fine grained 제어를 허용할 수 없는 {}-êµ¬ë¬¸ì„ ê°€ì§„ ì œì•½ì„ í•´ê²°í•´ì¤€ë‹¤. - - - + <return-property>는 ë˜í•œ 다중 ì»¬ëŸ¼ë“¤ì— ëŒ€í•´ ë™ìž‘한다. + ì´ê²ƒì€ 다중-컬럼 프로í¼í‹°ë“¤ì— 대한 fine grained 제어를 허용할 수 없는 + {}-êµ¬ë¬¸ì„ ê°€ì§„ ì œì•½ì„ í•´ê²°í•´ì¤€ë‹¤. + + @@ -330,28 +486,22 @@ List loggedCats = sess.createSQLQuery(sql) WHERE EMPLOYER = :id AND ENDDATE IS NULL ORDER BY STARTDATE ASC ]]> - - - ì´ ì˜ˆì œì—ì„œ 우리는 ë¼ì›Œë„£ê¸°(injection)를 위해 {}-구문과 함께 <return-property>를 - 사용했ìŒì„ 주목하ë¼. 사용ìžë“¤ì´ 컬럼과 프로í¼í‹°ë“¤ì„ ì°¸ì¡°í•˜ê³ ìž ì›í•˜ëŠ” ë°©ë²•ì„ ì„ íƒí•˜ëŠ” ê²ƒì„ ì‚¬ìš©ìžë“¤ì—게 허용해줌으로ì¨. - - - ë§Œì¼ ë‹¹ì‹ ì˜ ë§¤í•‘ì´ í•œ ê°œì˜ íŒë³„ìž(discriminator )를 가질 경우 ë‹¹ì‹ ì€ íŒë³„ìž ì»¬ëŸ¼ì„ ì§€ì •í•˜ëŠ”ë° - <return-discriminator>를 사용해야 한다. - - + ì´ ì˜ˆì œì—ì„œ 우리는 ë¼ì›Œë„£ê¸°(injection)를 위해 {}-구문과 함께 <return-property>를 + 사용했ìŒì„ 주목하ë¼. 사용ìžë“¤ì´ 컬럼과 프로í¼í‹°ë“¤ì„ ì°¸ì¡°í•˜ê³ ìž ì›í•˜ëŠ” ë°©ë²•ì„ ì„ íƒí•˜ëŠ” ê²ƒì„ ì‚¬ìš©ìžë“¤ì—게 허용해줌으로ì¨. + + ë§Œì¼ ë‹¹ì‹ ì˜ ë§¤í•‘ì´ í•œ ê°œì˜ íŒë³„ìž(discriminator )를 가질 경우 ë‹¹ì‹ ì€ íŒë³„ìž ì»¬ëŸ¼ì„ ì§€ì •í•˜ëŠ”ë° + <return-discriminator>를 사용해야 한다. + - - 질ì˜ë¥¼ 위한 내장 프로시저 사용하기 - - - Hibernate 3ì€ ë‚´ìž¥ 프로시저들과 í•¨ìˆ˜ë“¤ì„ í†µí•œ ì§ˆì˜ ì§€ì›ì„ ë„입한다. ëŒ€ë¶€ë¶„ì˜ ë‹¤ìŒ ë¬¸ì„œëŠ” ì–‘ìž ëª¨ë‘ì— ë™ì¼í•˜ê²Œ ì ìš©ëœë‹¤. - 내장 프로시저/함수는 Hibernate와 ë™ìž‘하는 ê²ƒì´ ê°€ëŠ¥í•˜ë„ë¡ ì²« 번째 out-파ë¼ë¯¸í„°ë¡œì„œ í•œ ê°œì˜ ê²°ê³¼ì…‹ì„ ë°˜í™˜í•´ì•¼ 한다. - Oracle9 ì´ìƒì˜ 버전ì—ì„œ 그런 내장 í”„ë¡œì‹œì €ì— ëŒ€í•œ 예제는 다ìŒê³¼ 같다: - - - + 질ì˜ë¥¼ 위한 내장 프로시저 사용하기 + + Hibernate 3ì€ ë‚´ìž¥ 프로시저들과 í•¨ìˆ˜ë“¤ì„ í†µí•œ ì§ˆì˜ ì§€ì›ì„ ë„입한다. ëŒ€ë¶€ë¶„ì˜ ë‹¤ìŒ ë¬¸ì„œëŠ” ì–‘ìž ëª¨ë‘ì— ë™ì¼í•˜ê²Œ ì ìš©ëœë‹¤. + 내장 프로시저/함수는 Hibernate와 ë™ìž‘하는 ê²ƒì´ ê°€ëŠ¥í•˜ë„ë¡ ì²« 번째 out-파ë¼ë¯¸í„°ë¡œì„œ í•œ ê°œì˜ ê²°ê³¼ì…‹ì„ ë°˜í™˜í•´ì•¼ 한다. + Oracle9 ì´ìƒì˜ 버전ì—ì„œ 그런 내장 í”„ë¡œì‹œì €ì— ëŒ€í•œ 예제는 다ìŒê³¼ 같다: + + - - - Hibernateì—ì„œ ì´ ì§ˆì˜ë¥¼ 사용하기 위해 ë‹¹ì‹ ì€ í•˜ë‚˜ì˜ ëª…ëª…ëœ ì§ˆì˜(a named query)를 통해 ê·¸ê²ƒì„ ë§¤í•‘í•  필요가 있다. - - - + + Hibernateì—ì„œ ì´ ì§ˆì˜ë¥¼ 사용하기 위해 ë‹¹ì‹ ì€ í•˜ë‚˜ì˜ ëª…ëª…ëœ ì§ˆì˜(a named query)를 통해 + ê·¸ê²ƒì„ ë§¤í•‘í•  필요가 있다. + + @@ -383,78 +532,61 @@ BEGIN { ? = call selectAllEmployments() } ]]> - - - 내장 í”„ë¡œì‹œì €ë“¤ì€ í˜„ìž¬ 스칼ë¼ë“¤ê³¼ 엔티티들 ë§Œì„ ë°˜í™˜í•¨ì„ ì£¼ëª©í•˜ë¼. <return-join>ê³¼ - <load-collection>ì€ ì§€ì›ë˜ì§€ 않는다. - - - - 내장 í”„ë¡œì‹œì €ë“¤ì„ ì‚¬ìš©í•˜ëŠ” 규칙들/제약들 - - - Hibernateì—ì„œ 내장 í”„ë¡œì‹œì €ë“¤ì„ ì‚¬ìš©í•˜ê¸° 위해서 프로시저들/í•¨ìˆ˜ë“¤ì€ ë‹¤ìŒ ëª‡ëª‡ ê·œì¹™ë“¤ì„ ë”°ë¼ì•¼ 한다. ë§Œì¼ ê·¸ê²ƒë“¤ì´ ê·¸ë“¤ ê·œì¹™ë“¤ì„ - 따르지 ì•Šì„ ê²½ìš° ê·¸ê²ƒë“¤ì€ Hibernate와 함께 사용 불가능하다. ë§Œì¼ ë‹¹ì‹ ì´ ì—¬ì „ížˆ ì´ë“¤ í”„ë¡œì‹œì €ë“¤ì„ ì‚¬ìš©í•˜ê³ ìž ì›í•  경우, - ë‹¹ì‹ ì€ session.connection()ì„ í†µí•´ ê·¸ê²ƒë“¤ì„ ì‹¤í–‰ì‹œì¼œì•¼ 한다. ë°ì´í„°ë² ì´ìŠ¤ 벤ë”ë“¤ì´ ë‹¤ë¥¸ 내장 - 프로시저 ì˜ë¯¸ë¡ /êµ¬ë¬¸ì„ ê°–ê³  있기 때문ì—, ê·œì¹™ë“¤ì€ ê°ê°ì˜ ë°ì´í„°ë² ì´ìŠ¤ì— ë”°ë¼ ì°¨ì´ê°€ 난다. - - - 내장 프로시저 질ì˜ë“¤ì€ setFirstResult()/setMaxResults()로서 쪽매김 ë  ìˆ˜ 없다. - + 내장 í”„ë¡œì‹œì €ë“¤ì€ í˜„ìž¬ 스칼ë¼ë“¤ê³¼ 엔티티들 ë§Œì„ ë°˜í™˜í•¨ì„ ì£¼ëª©í•˜ë¼. <return-join>ê³¼ + <load-collection>ì€ ì§€ì›ë˜ì§€ 않는다. - 권장ë˜ëŠ” 호출 형ì‹ì€ 표준 SQL92ì´ë‹¤: { ? = call + + 내장 í”„ë¡œì‹œì €ë“¤ì„ ì‚¬ìš©í•˜ëŠ” 규칙들/제약들 + + Hibernateì—ì„œ 내장 í”„ë¡œì‹œì €ë“¤ì„ ì‚¬ìš©í•˜ê¸° 위해서 프로시저들/í•¨ìˆ˜ë“¤ì€ ë‹¤ìŒ ëª‡ëª‡ ê·œì¹™ë“¤ì„ ë”°ë¼ì•¼ 한다. ë§Œì¼ ê·¸ê²ƒë“¤ì´ ê·¸ë“¤ ê·œì¹™ë“¤ì„ + 따르지 ì•Šì„ ê²½ìš° ê·¸ê²ƒë“¤ì€ Hibernate와 함께 사용 불가능하다. ë§Œì¼ ë‹¹ì‹ ì´ ì—¬ì „ížˆ ì´ë“¤ í”„ë¡œì‹œì €ë“¤ì„ ì‚¬ìš©í•˜ê³ ìž ì›í•  경우, + ë‹¹ì‹ ì€ session.connection()ì„ í†µí•´ ê·¸ê²ƒë“¤ì„ ì‹¤í–‰ì‹œì¼œì•¼ 한다. ë°ì´í„°ë² ì´ìŠ¤ 벤ë”ë“¤ì´ ë‹¤ë¥¸ 내장 + 프로시저 ì˜ë¯¸ë¡ /êµ¬ë¬¸ì„ ê°–ê³  있기 때문ì—, ê·œì¹™ë“¤ì€ ê°ê°ì˜ ë°ì´í„°ë² ì´ìŠ¤ì— ë”°ë¼ ì°¨ì´ê°€ 난다. + + 내장 프로시저 질ì˜ë“¤ì€ setFirstResult()/setMaxResults()로서 쪽매김 ë  ìˆ˜ 없다. + + 권장ë˜ëŠ” 호출 형ì‹ì€ 표준 SQL92ì´ë‹¤: { ? = call functionName(<parameters>) } ë˜ëŠ” { ? = call procedureName(<parameters>}. Native 호출 êµ¬ë¬¸ì€ ì§€ì›ë˜ì§€ 않는다. - - Oracleì˜ ê²½ìš° ë‹¤ìŒ ê·œì¹™ë“¤ì´ ì ìš©ëœë‹¤: - - - - - í•˜ë‚˜ì˜ í•¨ìˆ˜ëŠ” í•˜ë‚˜ì˜ ê²°ê³¼ ì…‹ì„ ë°˜í™˜í•´ì•¼ 한다. í”„ë¡œì‹œì €ì˜ ì²« 번째 파ë¼ë¯¸í„°ëŠ” í•˜ë‚˜ì˜ ê²°ê³¼ ì…‹ì„ ë°˜í™˜í•˜ëŠ” - í•˜ë‚˜ì˜ OUTì´ì–´ì•¼ 한다. ì´ê²ƒì€ Oracle 9 ë˜ëŠ” 10ì—ì„œ í•˜ë‚˜ì˜ SYS_REFCURSOR를 - 사용하여 행해진다. Oracleì—ì„œ ë‹¹ì‹ ì´ REF CURSOR íƒ€ìž…ì„ ì •ì˜í•  필요가 있다면, Oracle 보고서를 ë³´ë¼. - - - - - - Sybase ë˜ëŠ” MS SQL serverì˜ ê²½ìš° ë‹¤ìŒ ê·œì¹™ë“¤ì´ ì ìš©ëœë‹¤: - - - - - - 프로시저는 í•œ ê°œì˜ ê²°ê³¼ ì…‹ì„ ë°˜í™˜í•´ì•¼ 한다. ì´ë“¤ ì„œë²„ë“¤ì´ ì—¬ëŸ¬ ê°œì˜ ê²°ê³¼ì…‹ë“¤ê³¼ ì—…ë°ì´íŠ¸ ì¹´ìš´íŠ¸ë“¤ì„ ë°˜í™˜ 할수 있다/í•  것ì´ì´ë¯€ë¡œ, - Hibernate는 ê²°ê³¼ë“¤ì„ ë°˜ë³µ 순환할 것ì´ê³  ê·¸ê²ƒì˜ ë°˜í™˜ 값으로서 í•˜ë‚˜ì˜ ê²°ê³¼ ì…‹ì¸ ì²« 번째 결과를 취할 것ì´ë‹¤. ê·¸ ë°–ì˜ ëª¨ë“  ê²ƒì€ - íê¸°ë  ê²ƒì´ë‹¤. - - - - - ë§Œì¼ ë‹¹ì‹ ì´ ë‹¹ì‹ ì˜ í”„ë¡œì‹œì € ë‚´ì— SET NOCOUNT ONì„ ì´ìš© 가능하게 í•  수 있다면 ê·¸ê²ƒì€ ì•„ë§ˆ - 보다 효율ì ì´ê²Œ ë  ê²ƒì´ì§€ë§Œ ì´ê²ƒì€ í•„ìš” ì¡°ê±´ì´ ì•„ë‹ˆë‹¤. - - - - - + Oracleì˜ ê²½ìš° ë‹¤ìŒ ê·œì¹™ë“¤ì´ ì ìš©ëœë‹¤: - + + + í•˜ë‚˜ì˜ í•¨ìˆ˜ëŠ” í•˜ë‚˜ì˜ ê²°ê³¼ ì…‹ì„ ë°˜í™˜í•´ì•¼ 한다. í”„ë¡œì‹œì €ì˜ ì²« 번째 파ë¼ë¯¸í„°ëŠ” í•˜ë‚˜ì˜ ê²°ê³¼ ì…‹ì„ ë°˜í™˜í•˜ëŠ” + í•˜ë‚˜ì˜ OUTì´ì–´ì•¼ 한다. ì´ê²ƒì€ Oracle 9 ë˜ëŠ” 10ì—ì„œ í•˜ë‚˜ì˜ + SYS_REFCURSOR를 사용하여 행해진다. Oracleì—ì„œ ë‹¹ì‹ ì€ + REF CURSOR íƒ€ìž…ì„ ì •ì˜í•  필요가 있는ë°, Oracle 보고서를 ë³´ë¼. + + - - create, update 그리고 delete를 위한 맞춤형 SQL + Sybase ë˜ëŠ” MS SQL serverì˜ ê²½ìš° ë‹¤ìŒ ê·œì¹™ë“¤ì´ ì ìš©ëœë‹¤: - - Hibernate3는 create, update, delete 오í¼ë ˆì´ì…˜ë“¤ì„ 위한 맞춤형 ë¬¸ìž¥ë“¤ì„ ì‚¬ìš©í•  수 있다. Hibernateì—ì„œ í´ëž˜ìŠ¤ì™€ 콜렉션 - ì˜ì†ìžë“¤ì€ 구성 ì‹œì— ìƒì„±ëœ 문ìžì—´ë“¤ì˜ 집합(insertsql, deletesql, updatesql 등)ì„ ì´ë¯¸ í¬í•¨í•˜ê³  있다. - <sql-insert>, <sql-delete>, - <sql-update> 매핑 íƒœê·¸ë“¤ì€ ì´ë“¤ 문ìžì—´ë“¤ì„ 오버ë¼ì´ë“œ 시킨다: - + + + 프로시저는 í•œ ê°œì˜ ê²°ê³¼ ì…‹ì„ ë°˜í™˜í•´ì•¼ 한다. ì´ë“¤ ì„œë²„ë“¤ì´ ì—¬ëŸ¬ ê°œì˜ ê²°ê³¼ì…‹ë“¤ê³¼ ì—…ë°ì´íŠ¸ ì¹´ìš´íŠ¸ë“¤ì„ ë°˜í™˜ 할수 있다/í•  것ì´ì´ë¯€ë¡œ, + Hibernate는 ê²°ê³¼ë“¤ì„ ë°˜ë³µ 순환할 것ì´ê³  ê·¸ê²ƒì˜ ë°˜í™˜ 값으로서 í•˜ë‚˜ì˜ ê²°ê³¼ ì…‹ì¸ ì²« 번째 결과를 취할 것ì´ë‹¤. ê·¸ ë°–ì˜ ëª¨ë“  ê²ƒì€ + íê¸°ë  ê²ƒì´ë‹¤. + + + ë§Œì¼ ë‹¹ì‹ ì´ ë‹¹ì‹ ì˜ í”„ë¡œì‹œì € ë‚´ì— SET NOCOUNT ONì„ ì´ìš© 가능하게 í•  수 있다면 ê·¸ê²ƒì€ ì•„ë§ˆ + 보다 효율ì ì´ê²Œ ë  ê²ƒì´ì§€ë§Œ ì´ê²ƒì€ í•„ìš” ì¡°ê±´ì´ ì•„ë‹ˆë‹¤. + + + +
+ - + + create, update 그리고 delete를 위한 맞춤형 SQL + + Hibernate3는 create, update, delete 오í¼ë ˆì´ì…˜ë“¤ì„ 위한 맞춤형 ë¬¸ìž¥ë“¤ì„ ì‚¬ìš©í•  수 있다. Hibernateì—ì„œ í´ëž˜ìŠ¤ì™€ 콜렉션 + ì˜ì†ìžë“¤ì€ 구성 ì‹œì— ìƒì„±ëœ 문ìžì—´ë“¤ì˜ 집합(insertsql, deletesql, updatesql 등)ì„ ì´ë¯¸ í¬í•¨í•˜ê³  있다. + <sql-insert>, <sql-delete>, + <sql-update> 매핑 íƒœê·¸ë“¤ì€ ì´ë“¤ 문ìžì—´ë“¤ì„ 오버ë¼ì´ë“œ 시킨다: + + @@ -464,14 +596,10 @@ BEGIN DELETE FROM PERSON WHERE ID=? ]]> - - SQLì´ ë‹¹ì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ ë‚´ì—ì„œ ì§ì ‘ 실행ë˜ì–´ì„œ, ë‹¹ì‹ ì´ ì¢‹ì•„í•˜ëŠ” ìž„ì˜ì˜ dialect를 사용하는 ê²ƒì´ ìžìœ ë¡­ë‹¤. ë§Œì¼ ë‹¹ì‹ ì´ ë°ì´í„°ë² ì´ìŠ¤ - 지정ì ì¸ SQLì„ ì‚¬ìš©í•  경우 ì´ê²ƒì€ 물론 ë‹¹ì‹ ì˜ ë§¤í•‘ì˜ ì´ì‹ì„±ì„ ê°ì†Œì‹œí‚¬ 것ì´ë‹¤. - + SQLì´ ë‹¹ì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ ë‚´ì—ì„œ ì§ì ‘ 실행ë˜ì–´ì„œ, ë‹¹ì‹ ì´ ì¢‹ì•„í•˜ëŠ” ìž„ì˜ì˜ dialect를 사용하는 ê²ƒì´ ìžìœ ë¡­ë‹¤. ë§Œì¼ ë‹¹ì‹ ì´ ë°ì´í„°ë² ì´ìŠ¤ + 지정ì ì¸ SQLì„ ì‚¬ìš©í•  경우 ì´ê²ƒì€ 물론 ë‹¹ì‹ ì˜ ë§¤í•‘ì˜ ì´ì‹ì„±ì„ ê°ì†Œì‹œí‚¬ 것ì´ë‹¤. - - ë§Œì¼ callable ì†ì„±ì´ 설정ë˜ë©´ 내장 í”„ë¡œì‹œì €ë“¤ì´ ì§€ì›ëœë‹¤: - + ë§Œì¼ callable ì†ì„±ì´ 설정ë˜ë©´ 내장 í”„ë¡œì‹œì €ë“¤ì´ ì§€ì›ëœë‹¤: @@ -483,24 +611,19 @@ BEGIN {? = call updatePerson (?, ?)} ]]> - - 위치 파ë¼ë¯¸í„°ë“¤ì€ Hibernateê°€ ê·¸ê²ƒë“¤ì„ ê¸°ëŒ€í•˜ëŠ” 것과 ê°™ì€ ìˆœì„œê°€ ë˜ì–´ì•¼ 하므로, 위치 파ë¼ë¯¸í„°ë“¤ì˜ 순서는 현재 절대ì ìœ¼ë¡œ 중요하다. - - - - ë‹¹ì‹ ì€ org.hiberate.persister.entity 레벨로 디버그 ë¡œê¹…ì„ ì‚¬ìš© 가능하게 í•¨ìœ¼ë¡œì¨ ì˜ˆìƒëœ 순서를 ë³¼ 수 - 있다. ì´ ë ˆë²¨ì„ ì´ìš© 가능하게 하면 Hibernate는 ì—”í‹°í‹°ë“¤ì„ ìƒì„±ì‹œí‚¤ê³ , ì—…ë°ì´íŠ¸í•˜ê³ , ì‚­ì œí•˜ëŠ”ë° ì‚¬ìš©ë˜ëŠ” ì •ì ì¸ SQLì„ ì¶œë ¥í•  것ì´ë‹¤. - (예ìƒë˜ëŠ” 결과를 보려면, Hibernate ìƒì„±ëœ ì •ì ì¸ sqlì„ ì˜¤ë²„ë¼ì´ë“œ 시키게 매핑 파ì¼ë“¤ ì†ì— ë‹¹ì‹ ì˜ ë§žì¶¤í˜• SQLì„ í¬í•¨ì‹œí‚¤ì§€ ì•Šë„ë¡ ì—¼ë‘ì— - ë‘ë¼.) - + 위치 파ë¼ë¯¸í„°ë“¤ì€ Hibernateê°€ ê·¸ê²ƒë“¤ì„ ê¸°ëŒ€í•˜ëŠ” 것과 ê°™ì€ ìˆœì„œê°€ ë˜ì–´ì•¼ 하므로, + 위치 파ë¼ë¯¸í„°ë“¤ì˜ 순서는 현재 절대ì ìœ¼ë¡œ 중요하다. - - Hibernateê°€ ë¬¸ìž¥ì˜ ì„±ê³µì„ ìœ„í•´ 몇몇 실행 ì‹œ ì²´í¬ë“¤ì„ 행하므로, 내장 í”„ë¡œì‹œì €ë“¤ì€ ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ë“¤(ì½ê¸°:다른 경우들 보다 ê·¸ê²ƒì„ ë” ìž˜ - 행한다)ì—ì„œ insertë˜ê³ /ì—…ë°ì´íŠ¸ë˜ê³ /ì‚­ì œëœ í–‰ë“¤ì˜ ê°œìˆ˜ë¥¼ ë°˜í™˜í•˜ëŠ”ë° í•„ìš”í•˜ë‹¤. Hibernate는 í•­ìƒ CUD 오í¼ë ˆì´ì…˜ë“¤ì— 대한 ìˆ«ìž - 출력 파ë¼ë¯¸í„°ë¡œì„œ 첫 번째 문장 파ë¼ë¯¸í„°ë¥¼ 등ë¡ì‹œí‚¨ë‹¤: - + ë‹¹ì‹ ì€ org.hiberate.persister.entity 레벨로 디버그 ë¡œê¹…ì„ ì‚¬ìš© 가능하게 í•¨ìœ¼ë¡œì¨ ì˜ˆìƒëœ 순서를 ë³¼ 수 + 있다. ì´ ë ˆë²¨ì„ ì´ìš© 가능하게 하면 Hibernate는 ì—”í‹°í‹°ë“¤ì„ ìƒì„±ì‹œí‚¤ê³ , ì—…ë°ì´íŠ¸í•˜ê³ , ì‚­ì œí•˜ëŠ”ë° ì‚¬ìš©ë˜ëŠ” ì •ì ì¸ SQLì„ ì¶œë ¥í•  것ì´ë‹¤. + (예ìƒë˜ëŠ” 결과를 보려면, Hibernate ìƒì„±ëœ ì •ì ì¸ sqlì„ ì˜¤ë²„ë¼ì´ë“œ 시키게 매핑 파ì¼ë“¤ ì†ì— ë‹¹ì‹ ì˜ ë§žì¶¤í˜• SQLì„ í¬í•¨ì‹œí‚¤ì§€ ì•Šë„ë¡ ì—¼ë‘ì— + ë‘ë¼.) - Hibernateê°€ ë¬¸ìž¥ì˜ ì„±ê³µì„ ìœ„í•´ 몇몇 실행 ì‹œ ì²´í¬ë“¤ì„ 행하므로, 내장 í”„ë¡œì‹œì €ë“¤ì€ ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ë“¤(ì½ê¸°:다른 경우들 보다 ê·¸ê²ƒì„ ë” ìž˜ + 행한다)ì—ì„œ insertë˜ê³ /ì—…ë°ì´íŠ¸ë˜ê³ /ì‚­ì œëœ í–‰ë“¤ì˜ ê°œìˆ˜ë¥¼ ë°˜í™˜í•˜ëŠ”ë° í•„ìš”í•˜ë‹¤. Hibernate는 í•­ìƒ CUD 오í¼ë ˆì´ì…˜ë“¤ì— 대한 ìˆ«ìž + 출력 파ë¼ë¯¸í„°ë¡œì„œ 첫 번째 문장 파ë¼ë¯¸í„°ë¥¼ 등ë¡ì‹œí‚¨ë‹¤: + + + - - + + ë¡œë”©ì„ ìœ„í•œ 맞춤형 SQL - - ë¡œë”©ì„ ìœ„í•œ 맞춤형 SQL + ë‹¹ì‹ ì€ ë˜í•œ 엔티티 ë¡œë”©ì„ ìœ„í•œ 당신 ìžì‹ ì˜ SQL (ë˜ëŠ” HQL)ì„ ì„ ì–¸í•  ìˆ˜ë„ ìžˆë‹¤: - - ë‹¹ì‹ ì€ ë˜í•œ 엔티티 ë¡œë”©ì„ ìœ„í•œ 당신 ìžì‹ ì˜ SQL (ë˜ëŠ” HQL)ì„ ì„ ì–¸í•  ìˆ˜ë„ ìžˆë‹¤: - - - + SELECT NAME AS {pers.name}, ID AS {pers.id} FROM PERSON @@ -532,11 +651,9 @@ END updatePerson;]]> FOR UPDATE ]]> - - ì´ê²ƒì€ ì•žì„œ ë…¼ì˜í–ˆë“¯ì´ 단지 ëª…ëª…ëœ ì§ˆì˜ ì„ ì–¸ì´ë‹¤. ë‹¹ì‹ ì€ class 매핑 ì†ì— ì´ ëª…ëª…ëœ ì§ˆì˜ë¥¼ 참조할 수 있다: - + ì´ê²ƒì€ ì•žì„œ ë…¼ì˜í–ˆë“¯ì´ 단지 ëª…ëª…ëœ ì§ˆì˜ ì„ ì–¸ì´ë‹¤. ë‹¹ì‹ ì€ class 매핑 ì†ì— ì´ ëª…ëª…ëœ ì§ˆì˜ë¥¼ 참조할 수 있다: - + @@ -544,20 +661,16 @@ END updatePerson;]]> ]]> - - ì´ê²ƒì€ 심지어 내장 í”„ë¡œì‹œì €ë“¤ì— ë™ìž‘한다. - + ì´ê²ƒì€ 심지어 내장 í”„ë¡œì‹œì €ë“¤ì— ë™ìž‘한다. - - ë‹¹ì‹ ì€ ì½œë ‰ì…˜ ë¡œë”©ì„ ìœ„í•œ í•œ ê°œì˜ ì§ˆì˜ë¥¼ ì •ì˜í•  ìˆ˜ë„ ìžˆë‹¤: - + ë‹¹ì‹ ì€ ì½œë ‰ì…˜ ë¡œë”©ì„ ìœ„í•œ í•œ ê°œì˜ ì§ˆì˜ë¥¼ ì •ì˜í•  ìˆ˜ë„ ìžˆë‹¤: ]]> - + SELECT {emp.*} @@ -566,9 +679,7 @@ END updatePerson;]]> ORDER BY STARTDATE ASC, EMPLOYEE ASC ]]> - - ë‹¹ì‹ ì€ ì‹¬ì§€ì–´ ì¡°ì¸ íŽ˜ì¹­ì— ì˜í•´ í•˜ë‚˜ì˜ ì½œë ‰ì…˜ì„ ë¡œë“œì‹œí‚¤ëŠ” í•˜ë‚˜ì˜ ì—”í‹°í‹°ë¥¼ ì •ì˜í•  수 있다: - + ë‹¹ì‹ ì€ ì‹¬ì§€ì–´ ì¡°ì¸ íŽ˜ì¹­ì— ì˜í•´ í•˜ë‚˜ì˜ ì½œë ‰ì…˜ì„ ë¡œë“œì‹œí‚¤ëŠ” í•˜ë‚˜ì˜ ì—”í‹°í‹°ë¥¼ ì •ì˜í•  수 있다: @@ -579,7 +690,5 @@ END updatePerson;]]> ON pers.ID = emp.PERSON_ID WHERE ID=? ]]> - - - + \ No newline at end of file diff --git a/reference/ko/modules/session_api.xml b/reference/ko/modules/session_api.xml index 0670fb83b2..44a9753bc8 100644 --- a/reference/ko/modules/session_api.xml +++ b/reference/ko/modules/session_api.xml @@ -413,7 +413,7 @@ cats.close()]]> - + ëª…ëª…ëœ ì§ˆì˜ë“¤ì„ 구체화 시키기 @@ -421,7 +421,7 @@ cats.close()]]> í¬í•¨í•  ê²½ìš°ì— CDATA ì„¹ì…˜ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì„ ê¸°ì–µí•˜ë¼)) - ? @@ -431,7 +431,7 @@ cats.close()]]> 파ë¼ë¯¸í„° ë°”ì¸ë”©ê³¼ ì‹¤í–‰ì€ í”„ë¡œê·¸ëž¨ ìƒìœ¼ë¡œ 행해진다: - @@ -440,6 +440,13 @@ List cats = q.list();]]> 실제 프로그램 코드는 사용ë˜ëŠ” ì§ˆì˜ ì–¸ì–´ì— ë…립ì ì´ê³ , ë‹¹ì‹ ì€ ë˜í•œ 메타ë°ì´í„°ë¡œ native SQL 질ì˜ë“¤ì„ ì •ì˜í•  ìˆ˜ë„ ìžˆê±°ë‚˜ ê·¸ê²ƒë“¤ì„ ë§¤í•‘ 파ì¼ë“¤ ì†ì— 기존 질ì˜ë“¤ì„ ìœ„ì¹˜ì§€ì›€ìœ¼ë¡œì¨ ê¸°ì¡´ 질ì˜ë“¤ì„ Hibernateë¡œ ì´ì „시킬 ìˆ˜ë„ ìžˆìŒì„ 노트하ë¼. + + + ë˜í•œ <hibernate-mapping> 요소 ë‚´ì—ì„œ í•˜ë‚˜ì˜ ì§ˆì˜ ì„ ì–¸ì€ ê·¸ 질ì˜ì— 대한 + ì „ì—­ ìœ ì¼ ì´ë¦„ì„ í•„ìš”ë¡œ 하고, ë°˜ë©´ì— <class> 요소 ë‚´ì—ì„œì˜ ì§ˆì˜ ì„ ì–¸ì€ + í´ëž˜ìŠ¤ ì´ë¦„으로 수ì§ëœì´ë¦„ì„ ì²¨ê°€í•˜ì—¬ ìžë™ì ìœ¼ë¡œ 유ì¼í•˜ê²Œ 만들어진다. + 예를 들어 eg.Cat.ByNameAndMaximumWeight. + diff --git a/reference/ko/modules/transactions.xml b/reference/ko/modules/transactions.xml index f012df7733..255780bbb4 100644 --- a/reference/ko/modules/transactions.xml +++ b/reference/ko/modules/transactions.xml @@ -317,10 +317,7 @@ 않다. - - However, it is often desirable to keep your persistence layer portable between non-managed - resource-local environments, and systems that can rely on JTA but use BMT instead of CMT. - In both cases you'd use programmatic transaction demaracation. + 하지만, CMT 대신 BMT를 사용하는 JTAì— ì˜ì¡´í•  수 있는 시스템들, 그리고 관리ë˜ì§€ 않는 resource-local 환경들 사ì´ì—ì„œ ë‹¹ì‹ ì˜ ì˜ì† ê³„ì¸µì— ì´ì‹ì„±ì„ 유지시키는 ê²ƒì´ ìžì£¼ í¬ë§ëœë‹¤. ë‘ ê²½ìš°ë“¤ì—ì„œ ë‹¹ì‹ ì€ í”„ë¡œê·¸ëž¨ ìƒì˜ 트랜잭션 ê²½ê³„ì„¤ì •ì„ ì‚¬ìš©í•  것ì´ë‹¤. Hibernate는 ë‹¹ì‹ ì˜ ë°°ì¹˜ í™˜ê²½ì˜ ê³ ìœ í•œ 트랜잭션 시스템 ì†ìœ¼ë¡œ 변환ë˜ëŠ” Transactionì´ë¼ 명명ë˜ëŠ” @@ -488,7 +485,7 @@ catch (RuntimeException e) { tx.rollback(); throw e; // or display error message }]]> - + CMTì˜ ê²½ìš°, 트랜잭션 관할[경계 설정]ì€ í”„ë¡œê·¸ëž¨ ìƒì´ ì•„ë‹Œ, session bean 배치 디스í¬ë¦½í„°ë“¤ ì†ì—ì„œ 행해진다. 그러므로 코드는 다ìŒìœ¼ë¡œ ê°ì†Œëœë‹¤: @@ -621,7 +618,7 @@ try { sess.getTransaction().commit() } catch (RuntimeException e) { - sess.getTransaction().rollback(); + sess.getTransaction().rollback(); throw e; // or display error message } finally { @@ -716,7 +713,6 @@ foo.setProperty("bar"); session.flush(); // Only for last transaction in conversation t.commit(); // Also return JDBC connection session.close(); // Only for last transaction in conversation]]> - foo ê°ì²´ëŠ” ê·¸ê²ƒì´ ë¡œë“œë˜ì—ˆë˜ Sessionì´ ì–´ëŠ ê²ƒì¸ì§€ë¥¼ 여전히 알고 있다. ì´ì „ 세션 ìƒì—ì„œ í•˜ë‚˜ì˜ ìƒˆë¡œìš´ ë°ì´í„°ë² ì´ìŠ¤ íŠ¸ëžœìž­ì…˜ì„ ì‹œìž‘í•˜ëŠ” ê²ƒì€ í•˜ë‚˜ì˜ ìƒˆë¡œìš´ ì»¤ë„¥ì…˜ì„ íšë“하고 ê·¸ ì„¸ì…˜ì„ ì†Œë¹„í•œë‹¤. diff --git a/reference/ko/modules/tutorial.xml b/reference/ko/modules/tutorial.xml index 24c6f635a9..2f859c0bc5 100644 --- a/reference/ko/modules/tutorial.xml +++ b/reference/ko/modules/tutorial.xml @@ -1,18 +1,23 @@ Hibernate 개요 - + ë¨¸ë¦¬ë§ ì´ ìž¥ì€ Hibernate 초심ìžë¥¼ 위한 개론ì ì¸ 튜토리얼ì´ë‹¤. 우리는 메모리-ë‚´ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 사용하는 간단한 명령 ë¼ì¸ 어플리케ì´ì…˜ìœ¼ë¡œ 시작하고 ë‹¨ê³„ë“¤ì„ ì´í•´í•˜ë„ë¡ ì‰½ê²Œ ê·¸ê²ƒì„ ê°œë°œí•œë‹¤. - ì´ íŠœí† ë¦¬ì–¼ì€ Hibernate ì‹ ê·œ 사용ìžë“¤ì„ ì˜ë„하고 있지만 Java와 SQL 지ì‹ì„ 필요로 한다. - ê·¸ê²ƒì€ Michael Gloeglì´ ìž‘ì„±í•œ íŠœí† ë¦¬ì–¼ì— ê¸°ì´ˆí•œë‹¤. + ê·¸ê²ƒì€ Michael Gloeglì´ ìž‘ì„±í•œ íŠœí† ë¦¬ì–¼ì— ê¸°ì´ˆí•˜ë©°, 우리가 명명하는 ì œ 3ì˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ë“¤ì€ + JDK 1.4와 5.0 버전용ì´ë‹¤. ë‹¹ì‹ ì€ JDK1.3ì— ëŒ€í•´ 다른 ë¼ì´ë¸ŒëŸ¬ë¦¬ë“¤ì„ 필요로 í•  ìˆ˜ë„ ìžˆë‹¤. + + + + 튜토리얼용 소스는 doc/reference/tutorial/ 디렉토리 ë‚´ì— ìžˆëŠ” + ë°°í¬ë³¸ ë‚´ì— í¬í•¨ë˜ì–´ 있다. @@ -62,14 +67,16 @@ 다ìŒìœ¼ë¡œ 우리는 우리가 ë°ì´í„°ë² ì´ìŠ¤ ì†ì— ì €ìž¥ì‹œí‚¤ê³ ìž ì›í•˜ëŠ” ì´ë²¤íŠ¸ë¥¼ 표현하는 í•œ ê°œì˜ í´ëž˜ìŠ¤ë¥¼ ìƒì„±ì‹œí‚¨ë‹¤. - + 첫 번째 í´ëž˜ìŠ¤ ìš°ë¦¬ì˜ ì²« 번째 ì˜ì† í´ëž˜ìŠ¤ëŠ” 몇몇 프로í¼í‹°ë“¤ì„ 가진 간단한 ìžë°”빈즈 í´ëž˜ìŠ¤ì´ë‹¤: - ë‹¹ì‹ ì€ ì´ í´ëž˜ìŠ¤ê°€ 프로í¼í‹° getter와 setter ë©”ì†Œë“œë“¤ì— ëŒ€í•œ 표준 ìžë°”빈즈 명명법들 ë¿ë§Œ ì•„ë‹ˆë¼ í•„ë“œë“¤ì— ëŒ€í•œ private ê°€ì‹œì„±ì„ ì‚¬ìš©í•˜ê³  있ìŒì„ ì•Œ 수 있다. ì´ê²ƒì€ 권장ë˜ëŠ” 설계ì´ì§€ë§Œ, 필수ì ì´ì§€ëŠ” 않다. Hibernate는 - ë˜í•œ í•„ë“œë“¤ì— ì§ì ‘ 접근할 수 있으며, accessor ë©”ì†Œë“œë“¤ì˜ ì´ì ì€ ê°•ê±´í•œ 리팩토ë§ì´ë‹¤. + ë˜í•œ í•„ë“œë“¤ì— ì§ì ‘ 접근할 수 있으며, accessor ë©”ì†Œë“œë“¤ì˜ ì´ì ì€ ê°•ê±´í•œ 리팩토ë§ì´ë‹¤. 아규먼트 없는 ìƒì„±ìžëŠ” + reflectionì„ í†µí•´ ì´ í´ëž˜ìŠ¤ì˜ ê°ì²´ë¥¼ 초기화 시킬 필요가 있다. - id 프로í¼í‹°ëŠ” 특별한 ì´ë²¤íŠ¸ë¥¼ 위한 ìœ ì¼ ì‹ë³„ìžë¥¼ 소유한다. ë§Œì¼ ìš°ë¦¬ê°€ Hibernateì˜ - ì „ì²´ íŠ¹ì§•ì„ ì‚¬ìš©í•˜ê³ ìž ì›í•  경우 모든 ì˜ì† 엔티티 í´ëž˜ìŠ¤ë“¤(보다 ëœ ì¤‘ìš”í•œ ì¢…ì† í´ëž˜ìŠ¤ë“¤ ë˜í•œ 존재한다)ì€ ê·¸ëŸ° - ì‹ë³„ìž í”„ë¡œí¼í‹°ë¥¼ 필요로 í•  것ì´ë‹¤. 사실 ëŒ€ë¶€ë¶„ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ë“¤(특히 웹 어플리케ì´ì…˜ë“¤)ì€ ì‹ë³„ìžì— ì˜í•´ - ê°ì²´ë“¤ì„ êµ¬ë¶„ì§€ì„ í•„ìš”ê°€ 있어서, ë‹¹ì‹ ì€ ì´ê²ƒì„ ì–´ë–¤ 제한ì´ë¼ê¸° 보다는 í•˜ë‚˜ì˜ íŠ¹ì§•ìœ¼ë¡œ 간주할 것ì´ë‹¤. 하지만 - 우리는 대개 ê°ì²´ì˜ 항등(identity)를 처리하지 않으므로, setter 메소드는 privateì´ì–´ì•¼ 한다. ê°ì²´ê°€ ì €ìž¥ë  ë•Œ, - Hibernate는 단지 ì‹ë³„ìžë¥¼ 할당할 것ì´ë‹¤. ë‹¹ì‹ ì€ Hibernateê°€ public, private, protected ì ‘ê·¼ìž ë©”ì†Œë“œë“¤ - ë¿ë§Œ ì•„ë‹ˆë¼ (public, private, protected) 필드들ì—ë„ ì§ì ‘ 접근할 수 있ìŒì„ ì•Œ 수 있다. ì„ íƒì€ 당신ì—게 달려 - 있으며, ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ ì„¤ê³„ì— ì í•©í•˜ë„ë¡ ê·¸ê²ƒì„ ë¶€í•©ì‹œí‚¬ 수 있다. + id 프로í¼í‹°ëŠ” 특별한 ì´ë²¤íŠ¸ë¥¼ 위한 ìœ ì¼ ì‹ë³„ìžë¥¼ 소유한다. 모든 ì˜ì† 엔티티 í´ëž˜ìŠ¤ë“¤ + (보다 ëœ ì¤‘ìš”í•œ ì¢…ì† í´ëž˜ìŠ¤ë“¤ë„ 존재한다)ì€ ìš°ë¦¬ê°€ Hibernateì˜ ì „ì²´ 특징 ì§‘í•©ì„ ì‚¬ìš©í•˜ê³ ìž ì›í•  ê²½ìš°ì— + 그런 ì‹ë³„ìž í”„ë¡œí¼í‹°ë¥¼ 필요로 í•  것ì´ë‹¤. 사실 ëŒ€ë¶€ë¶„ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ë“¤(특히 웹 어플리케ì´ì…˜ë“¤)ì€ ì‹ë³„ìžì— ì˜í•´ + ê°ì²´ë“¤ì„ êµ¬ë¶„ì§€ì„ í•„ìš”ê°€ 있어서, ë‹¹ì‹ ì€ ì´ê²ƒì„ ì–´ë–¤ 제약ì ì´ë¼ê¸° 보다는 í•˜ë‚˜ì˜ íŠ¹ì§•ìœ¼ë¡œ 간주할 것ì´ë‹¤. 하지만 + 우리는 대개 ê°ì²´ì˜ 항등(identity)를 처리하지 않으므로, setter 메소드는 privateì´ì–´ì•¼ 한다. ê°ì²´ê°€ ì €ìž¥ë  ë•Œ, + Hibernate는 단지 ì‹ë³„ìžë“¤ì„ 할당할 것ì´ë‹¤. ë‹¹ì‹ ì€ Hibernateê°€ public, private, protected ì ‘ê·¼ìž ë©”ì†Œë“œë“¤ + ë¿ë§Œ ì•„ë‹ˆë¼ (public, private, protected) 필드들ì—ë„ ì§ì ‘ 접근할 수 있ìŒì„ ì•Œ 수 있다. ì„ íƒì€ 당신ì—게 달려 + 있으며, ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ ì„¤ê³„ì— ì í•©í•˜ë„ë¡ ê·¸ê²ƒì„ ë¶€í•©ì‹œí‚¬ 수 있다. @@ -128,7 +136,7 @@ public class Event { - ì´ Java 노스 파ì¼ì„ 개발 í´ë” ë‚´ì˜ srcë¡œ ëª…ëª…ëœ ë””ë ‰í† ë¦¬ ì†ì— 있는 위치지워ë¼. ì´ì œ + ì´ Java 소스 파ì¼ì„ 개발 í´ë” ë‚´ì˜ srcë¡œ ëª…ëª…ëœ ë””ë ‰í† ë¦¬ ì†ì— 있는 위치지워ë¼. ì´ì œ ê·¸ 디렉토리는 다ìŒê³¼ ê°™ì„ ê²ƒì´ë‹¤: @@ -136,7 +144,8 @@ public class Event { +lib +src - Event.java]]> + +events + Event.java]]> ë‹¤ìŒ ë‹¨ê³„ì—ì„œ, 우리는 Hiberanteì—게 ì´ ì˜ì† í´ëž˜ìŠ¤ì— 대해 알려 준다. @@ -144,8 +153,8 @@ public class Event { - - 매핑 íŒŒì¼ + + The mapping file Hibernate는 ì˜ì† í¬ëž˜ìŠ¤ë“¤ì— 대한 ê°ì²´ë“¤ì„ 로드시키고 저장시키는 ë°©ë²•ì„ ì•Œ 필요가 있다. @@ -189,7 +198,7 @@ public class Event { - + @@ -204,9 +213,9 @@ public class Event { - + - + @@ -230,9 +239,9 @@ public class Event { - + - + @@ -242,7 +251,9 @@ public class Event { id ìš”ì†Œì˜ ê²½ìš°ì²˜ëŸ¼, property ìš”ì†Œì˜ name - ì†ì„±ì€ 사용할 getter ë° setter ë©”ì†Œë“œë“¤ì´ ì–´ëŠ ê²ƒì¸ì§€ë¥¼ Hibernateì—게 알려준다. + ì†ì„±ì€ 사용할 getter ë° setter ë©”ì†Œë“œë“¤ì´ ì–´ëŠ ê²ƒì¸ì§€ë¥¼ Hibernateì—게 알려준다. ë”°ë¼ì„œ ì´ ê²½ìš°ì— Hibernate는 + getDate()/setDate() ë¿ë§Œ ì•„ë‹ˆë¼ getTitle()/setTitle()ì„ + 찾게 ë  ê²ƒì´ë‹¤. @@ -262,8 +273,9 @@ public class Event { ê·¸ ìžì²´ë¥¼ 결정하려고 ì‹œë„í•  것ì´ë‹¤. 몇몇 경우들ì—ì„œ (Java í´ëž˜ìŠ¤ì— 대한 Reflectionì„ ì‚¬ìš©í•˜ëŠ”) ì´ ìžë™ì ì¸ ê²€ì¶œì€ ë‹¹ì‹ ì´ ì˜ˆìƒí•˜ê±°ë‚˜ 필요로 하는 ë””í´íŠ¸ë¥¼ 갖지 ì•Šì„ ìˆ˜ë„ ìžˆë‹¤. ì´ê²ƒì€ date 프로í¼í‹°ë¥¼ 가진 경우ì´ë‹¤. Hibernate는 ê·¸ 프로í¼í‹°ê°€ SQL date 컬럼, timestamp - 컬럼 ë˜ëŠ” time 컬럼 중 ì–´ëŠ ê²ƒìœ¼ë¡œ 매핑ë˜ì–´ì•¼ 하는지를 ì•Œ 수가 없다. 우리는 timestamp를 - 가진 프로í¼í‹°ë¥¼ ë§¤í•‘í•¨ìœ¼ë¡œì¨ ì „ì²´ 날짜와 시간 정보를 보존하고 싶다고 선언한다. + 컬럼 ë˜ëŠ” time 컬럼 중 ì–´ëŠ ê²ƒìœ¼ë¡œ 매핑ë˜ì–´ì•¼ 하는지를 ì•Œ 수가 없다. 우리는 + timestamp 컨버터를 가진 프로í¼í‹°ë¥¼ ë§¤í•‘í•¨ìœ¼ë¡œì¨ ì „ì²´ 날짜와 시간 정보를 보존하고 싶다고 + 선언한다. @@ -277,8 +289,9 @@ public class Event { +lib +src - Event.java - Event.hbm.xml]]> + +events + Event.java + Event.hbm.xml]]> 우리는 Hibernateì˜ ë©”ì¸ êµ¬ì„±ì„ ê³„ì† í–‰í•œë‹¤. @@ -299,7 +312,7 @@ public class Event { 개발 ë””ë ‰í† ë¦¬ì˜ ë£¨íŠ¸ì— dataë¡œ ëª…ëª…ëœ ë””ë ‰í† ë¦¬ë¥¼ ìƒì„±ì‹œì¼œë¼ - ì´ ë””ë ‰í† ë¦¬ëŠ” HSQL DBê°€ ê·¸ê²ƒì˜ ë°ì´í„° 파ì¼ë“¤ì„ 저장하게 ë  ìž¥ì†Œì´ë‹¤. ì´ì œ ì´ ë°ì´í„° 디렉토리ì—ì„œ - java -classpath lib/hsqldb.jar org.hsqldb.Server를 실행시켜서 + java -classpath ../lib/hsqldb.jar org.hsqldb.Server를 실행시켜서 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 시작시켜ë¼. ë‹¹ì‹ ì€ ê·¸ê²ƒì´ ì‹œìž‘ë˜ê³  ì´ê²ƒì€ ìš°ë¦¬ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì´ ë‚˜ì¤‘ì— ì—°ê²°í•˜ê²Œ ë  ìž¥ì†Œì¸, í•˜ë‚˜ì˜ TCP/IP ì†Œì¼“ì— ë°”ì¸ë“œ ë˜ëŠ” ê²ƒì„ ë³¼ 수 있다. ë§Œì¼ ì´ íŠœí† ë¦¬ì–¼ ë™ì•ˆì— ë‹¹ì‹ ì´ ìƒˆ ë°ì´í„°ë² ì´ìŠ¤ë¡œ ì‹œìž‘í•˜ê³ ìž ì›í•  경우, HSQL DB를 셧다운시키고(왼ë„ìš°ì—ì„œ CTRL + C를 눌러ë¼), @@ -332,26 +345,29 @@ public class Event { org.hsqldb.jdbcDriver - jdbc:hsqldb:data/tutorial + jdbc:hsqldb:hsql://localhost sa 1 - - true - org.hibernate.dialect.HSQLDialect + + thread + + + org.hibernate.cache.NoCacheProvider + true create - + @@ -382,7 +398,7 @@ public class Event { - + Antë¡œ 빌드하기 @@ -393,16 +409,6 @@ public class Event { 명명ë˜ê³  개발 디렉토리 ì†ì— ì§ì ‘ ìœ„ì¹˜ë  ê²ƒì´ë‹¤. - - Ant 설치 - - ë””í´íŠ¸ë¡œ Ant ë°°í¬ë³¸ì€ (FAQì— ì„¤ëª…ë˜ì—ˆë“¯ì´) 깨어져 있으며, 예를 들어, ë§Œì¼ ë‹¹ì‹ ì´ ë‹¹ì‹ ì˜ ë¹Œë“œ íŒŒì¼ ë‚´ë¶€ì—ì„œ - JUnit를 ì‚¬ìš©í•˜ê³ ìž ì›í•  경우 ë‹¹ì‹ ì— ì˜í•´ ì •ì •ë˜ì–´ì•¼ 한다. JUnit íƒœìŠ¤í¬ ìž‘ì—…ì„ í–‰í•˜ê¸° 위해(우리는 ì´ - 튜토리얼ì—ì„œ ê·¸ê²ƒì„ í•„ìš”ë¡œ 하지 ì•Šì„ ê²ƒì´ë‹¤), junit.jar를 ANT_HOME/libì— ë³µì‚¬í•˜ê±°ë‚˜ - ANT_HOME/lib/ant-junit.jar í”ŒëŸ¬ê·¸ì¸ ìŠ¤í…ì„ ì œê±°í•˜ë¼. - - - 기본 빌드 파ì¼ì€ 다ìŒê³¼ 같다: @@ -460,7 +466,7 @@ Total time: 1 second ]]> - + 시작과 helper들 @@ -478,12 +484,14 @@ Total time: 1 second ]]> 유용하며, 우리는 í˜„ìž¬ì˜ ìž‘ì—… 단위를 í˜„ìž¬ì˜ ì“°ë ˆë“œì™€ 연관지워 유지한다. êµ¬í˜„ì„ ì‚´íŽ´ë³´ìž: - @@ -545,9 +538,11 @@ public class HibernateUtil { +lib +src - Event.java - Event.hbm.xml - HibernateUtil.java + +events + Event.java + Event.hbm.xml + +util + HibernateUtil.java hibernate.cfg.xml +data build.xml]]> @@ -567,7 +562,7 @@ build.xml]]> - + ê°ì²´ 로딩과 ê°ì²´ 저장 @@ -575,11 +570,13 @@ build.xml]]> 메소드를 가진 í•œ ê°œì˜ EventManager í´ëž˜ìŠ¤ë¥¼ 작성한다: - + private void createAndStoreEvent(String title, Date theDate) { - - 우리는 명령 ë¼ì¸ìœ¼ë¡œë¶€í„° 몇몇 ì•„ê·œë¨¼íŠ¸ë“¤ì„ ì½ì–´ë“¤ì´ê³ , ë§Œì¼ ì²« 번째 아규먼트가 "store"ì´ë©´, 우리는 - 새로운 Event를 ìƒì„±ì‹œí‚¤ê³  저장시킨다: - + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - @@ -621,22 +614,31 @@ public class EventManager { - Sessionì€ í•œ ê°œì˜ ìž‘ì—… 단위ì´ë‹¤. ë‹¹ì‹ ì€ ìš°ë¦¬ê°€ 추가ì ì¸ API, Transactiondmf - ê°–ê³  있ìŒì— 놀ëžì„ ìˆ˜ë„ ìžˆë‹¤. ì´ê²ƒì€ ìž‘ì—… 단위가 í•œ ê°œì˜ ë°ì´í„°ë² ì´ìŠ¤ 트랜잭션보다 "ë” ê¸´" ê²½ìš°ì¼ ìˆ˜ 있ìŒì„ ì˜ë¯¸í•œë‹¤ - -웹 어플리케ì´ì…˜ ì†ì—ì„œ 여러 ê°œì˜ Http 요청/ì‘답 주기들(예를 들면 마법사 대화ìƒìž)ì— ê±¸ì¹˜ëŠ” ìž‘ì—… 단위를 ìƒìƒí•˜ë¼. - 지금 우리는 ê·¸ê²ƒë“¤ì„ ê°„ë‹¨í•˜ê²Œ 유지할 것ì´ê³  Sessionê³¼ Transaction - 사ì´ì— í•œ ê°œì˜ one-to-one ìž…ìƒì„ 가정할 것ì´ë‹¤. + Sessionì€ í•œ ê°œì˜ ìž‘ì—… 단위ì´ë‹¤. 지금부터 우리는 ë‹¨ìˆ¨í•¨ì„ ìœ ì§€í•  것ì´ê³  + Hibernate Sessionê³¼ ë°ì´í„°ë² ì´ìŠ¤ 트랜잭션 사ì´ì˜ ì¼-대-ì¼ ê³¼ë¦½í˜•(granularity)ì„ ê°€ì •í•  것ì´ë‹¤. + 실제 기반 트랜잭션 시스템으로부터 ìš°ë¦¬ì˜ ì†ŒìŠ¤ë¥¼ ì€í시키기 위해(ì´ ê²½ìš° 통ìƒì˜ JDBCì´ì§€ë§Œ, ê·¸ê²ƒì€ ë˜í•œ JTAì—ë„ ì‹¤í–‰ëœë‹¤) + 우리는 Hibernate Session ìƒì—ì„œ ì´ìš© 가능한 Transaction API를 + 사용한다. - Transaction.begin()ê³¼ commit()ì€ ë¬´ì—‡ì„ í–‰í•˜ëŠ”ê°€? - 잘못ë˜ëŠ” 경우들ì—ì„œ rollback()ì€ ì–´ë””ì— ìžˆëŠ”ê°€? Hibernate - Transaction API는 실제 옵션ì´ì§€ë§Œ, 우리는 편ì˜ì™€ ì´ì‹ì„±ì„ 위해 ê·¸ê²ƒì„ ì‚¬ìš©í•œë‹¤. - (예를 들어 session.connection.commit()ì„ í˜¸ì¶œí•¨ìœ¼ë¡œì¨)ë§Œì¼ ë‹¹ì‹  ìžì‹ ì´ - ë°ì´í„°ë² ì´ìŠ¤ íŠ¸ëžœìž­ì…˜ì„ ì²˜ë¦¬í–ˆë‹¤ë©´, ë‹¹ì‹ ì€ ì´ ì§ì ‘ì ì¸ 관리ë˜ì§€ 않는 JDBCë¡œ 특별한 배치 í™˜ê²½ì— ê·¸ 코드를 - ë°”ì¸ë“œì‹œì¼°ë‹¤. ë‹¹ì‹ ì˜ Hibernate 구성 ì†ì—ì„œ Transactionì„ ìœ„í•œ 팩토리를 설정함으로ì¨, - ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ ì˜ì† ê³„ì¸µì„ ì–´ë””ì—서나 배치할 수 있다. 트랜잭션 처리와 ê´€í• ì— ëŒ€í•œ 추가 정보는 - 를 살펴보ë¼. 우리는 ë˜í•œ ì´ ì˜ˆì œì—ì„œ 오류 핸들ë§ê³¼ ë¡¤ë°±ì„ ìƒëžµí–ˆë‹¤. + sessionFactory.getCurrentSession()ì€ ë¬´ì—‡ì„ í–‰í•˜ëŠ”ê°€? 먼저 + ë‹¹ì‹ ì€ ë‹¹ì‹ ì´ (HibernateUtil ë•ë¶„ì— ì‰½ê²Œ) SessionFactoryì„ + ë‹¹ì‹ ì´ ì†Œìœ í•˜ê³  있다면, ì›í•˜ëŠ” ë§Œí¼ ì–´ë””ì„œë“  여러번 ê·¸ê²ƒì„ í˜¸ì¶œí•  수 있다. + getCurrentSession() 메소드는 í•­ìƒ "현재ì˜" ìž‘ì—… 단위를 반환한다. 우리가 + hibernate.cfg.xml ë‚´ì—ì„œ ì´ ë§¤ì»¤ë‹ˆì¦˜ì— ëŒ€í•œ 구성 ì˜µì…˜ì„ "thread"ë¡œ 전환시켰ìŒì„ 기억하는가? + 그러므로 현재 ìž‘ì—… ë‹¨ìœ„ì˜ ì˜ì—­ì€ ìš°ë¦¬ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì„ 실행시키는 í˜„ìž¬ì˜ Java 쓰레드ì´ë‹¤. 하지만 ì´ê²ƒì€ + 전부가 ì§„ì‹¤ì€ ì•„ë‹ˆë‹¤. ê·¸ê²ƒì´ ì²˜ìŒìœ¼ë¡œ 필요로 ë˜ê³ , getCurrentSession()ì„ ì²«ë²ˆì§¸ë¡œ + 호출할 ë•Œ Sessionì´ ì‹œìž‘ëœë‹¤. 그때 í˜„ì§¸ì˜ ì“°ë ˆë“œì— ëŒ€í•´ Hibernateì— ì˜í•´ ë°”ì¸ë“œ ëœë‹¤. + íŠ¸ëžœìž­ì…˜ì´ ì¢…ë£Œë  ë•Œ 커밋 ë˜ê±°ë‚˜ 롤백ë˜ê³ , Hibernate는 ë˜í•œ 쓰레드로부터 Sessionì„ + ë°”ì¸ë“œ 해제시키고 ë‹¹ì‹ ì„ ìœ„í•´ ê·¸ê²ƒì„ ë‹«ëŠ”ë‹¤. ë§Œì¼ ë‹¹ì‹ ì´ getCurrentSession()ì„ ë‹¤ì‹œ + 호출한다면, ë‹¹ì‹ ì€ ìƒˆë¡œìš´ Sessionì„ ì–»ê³  새로운 작업단위를 시작할 수 있다. ì´ + thread-bound í”„ë¡œê·¸ëž˜ë° ëª¨í˜•ì€ Hibernate를 사용하는 가장 대중ì ì¸ 방법ì´ë‹¤. + + + + 트랜잭션 핸들ë§ê³¼ ê²½ê³„êµ¬ë¶„ì— ëŒ€í•œ 추가 정보는 ì„ ì‚´íŽ´ë³´ë¼. + 우리는 ë˜í•œ ì•žì˜ ì˜ˆì œì—ì„œ ìž„ì˜ì˜ 오류 처리와 ë¡¤ë°±ì„ ìƒëžµí–ˆë‹¤. @@ -644,7 +646,7 @@ public class EventManager { - + @@ -691,13 +693,14 @@ else if (args[0].equals("list")) { @@ -722,9 +725,9 @@ else if (args[0].equals("list")) { - ì´ì œ ë‹¹ì‹ ì˜ hibernate.cfg.xml íŒŒì¼ ì†ì—ì„œ 프로í¼í‹°ë¥¼ 주ì„ì²˜ë¦¬í•¨ìœ¼ë¡œì¨ hbm2ddlì„ - 사용불가능하게 하ë¼. 대개 ë‹¹ì‹ ì€ ì§€ì†ë˜ëŠ” 단위 테스팅ì—ì„œ ê·¸ê²ƒì„ ì‚¬ìš© 가능하게 내버려ë‘ì–´ë„ ë˜ì§€ë§Œ, ë˜ ë‹¤ë¥¸ - hbm2ddlì˜ ì‹¤í–‰ì€ ë‹¹ì‹ ì´ ì €ìž¥í–ˆë˜ ëª¨ë“  ê²ƒì„ ë“œë¡­ì‹œí‚¬ 것ì´ë‹¤ - create + ì´ì œ ë‹¹ì‹ ì˜ hibernate.cfg.xml íŒŒì¼ ì†ì—ì„œ ê·¸ 프로í¼í‹°ë¥¼ 주ì„ì²˜ë¦¬í•¨ìœ¼ë¡œì¨ hbm2ddlì„ + 사용불가능하게 하ë¼. 대개 ë‹¹ì‹ ì€ ì§€ì†ë˜ëŠ” 단위 테스팅ì—서는 ê·¸ê²ƒì„ ì‚¬ìš© 가능하게 내버려ë‘ì–´ë„ ë˜ì§€ë§Œ, ë˜ ë‹¤ë¥¸ + hbm2ddlì˜ ì‹¤í–‰ì€ ë‹¹ì‹ ì´ ì €ìž¥í–ˆë˜ ëª¨ë“  ê²ƒì„ drop시킬 것ì´ë‹¤ - create 구성 ì„¤ì •ì€ ì‹¤ì œë¡œ "스키마로부터 모든 í…Œì´ë¸”ë“¤ì„ ë“œë¡­ì‹œí‚¤ê³  나서, SessionFactoryê°€ ë¹Œë“œë  ë•Œ 모든 í…Œì´ë¸”ë“¤ì„ ë‹¤ì‹œ ìƒì„±ì‹œí‚¤ëŠ” 것"으로 변환ëœë‹¤. @@ -755,35 +758,38 @@ else if (args[0].equals("list")) { 우리는 ìš°ë¦¬ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì— ì‚¬ëžŒë“¤ì„ ì¶”ê°€í•˜ê³  ê·¸ë“¤ì´ ì°¸ì—¬í•˜ëŠ” ì´ë²¤íŠ¸ë“¤ì˜ 목ë¡ì„ 저장할 것ì´ë‹¤. - + Person í´ëž˜ìŠ¤ 매핑하기 í´ëž˜ìŠ¤ì˜ 첫 번째 ìž¥ë©´ì€ ê°„ë‹¨í•˜ë‹¤: - - Person.hbm.xmlë¡œ ëª…ëª…ëœ ìƒˆë¡œìš´ 매핑 파ì¼ì„ ìƒì„±ì‹œì¼œë¼: + Person.hbm.xmlë¡œ 명명ë˜ëŠ” 새로운 매핑 파ì¼ì„ ìƒì„±ì‹œì¼œë¼ + (ë§¨ìœ„ì— DTD 참조를 잊지ë§ë¼): - + - + @@ -796,9 +802,8 @@ else if (args[0].equals("list")) { 마지막으로 새로운 ë§¤í•‘ì„ Hibernateì˜ êµ¬ì„±ì— ì¶”ê°€í•˜ë¼: - - -]]> + +]]> ì´ì œ 우리는 ì´ë“¤ ë‘ ê°œì˜ ì—”í‹°í‹°ë“¤ 사ì´ì— í•œ ê°œì˜ ì—°ê´€ì„ ìƒì„±ì‹œí‚¬ 것ì´ë‹¤. 명백하게, ê°œì¸ë“¤ì€ ì´ë²¤íŠ¸ë“¤ì— @@ -845,29 +850,6 @@ else if (args[0].equals("list")) { 사용한다: - - - - ì´ ì—°ê´€ì„ ë§¤í•‘ì‹œí‚¤ê¸° ì „ì—, 다른 ì¸¡ì— ëŒ€í•´ ìƒê°í•´ë³´ìž. 명료하게 우리는 ì´ê²ƒì„ 단방향으로 유지시킬 수 있다. ë˜ëŠ” - ë§Œì¼ ìš°ë¦¬ê°€ 양방향으로 네비게ì´íŠ¸í•˜ëŠ” ê²ƒì„ ê°€ëŠ¥í•˜ë„ë¡ í•˜ê³ ìž ì›í•  경우ì—, 우리는 Event ìƒì˜ - ë˜ ë‹¤ë¥¸ ì½œë ‰ì…˜ì„ ìƒì„±ì‹œí‚¬ 수 있다. 예를 들면.anEvent.getParticipants(). ì´ê²ƒì€ - 기능ì ì¸ ê´€ì ì—ì„œ 필수ì ì´ì§€ 않다. ë‹¹ì‹ ì€ íŠ¹ì • ì´ë²¤íŠ¸ì— 대한 참여ìžë“¤ì„ 검색하기 위해 í•˜ë‚˜ì˜ ëª…ì‹œì ì¸ 질ì˜ë¥¼ í•­ìƒ - 실행시킬 수 있다. ì´ê²ƒì€ 당신ì—게 설계ìƒì˜ ì„ íƒìœ¼ë¡œ 남겨ë‘지만, ì´ ë…¼ì˜ì—ì„œ 명료해지는 ê²ƒì€ ê·¸ ì—°ê´€ì˜ ë‹¤ì¤‘ì„±ì´ë‹¤: - ì–‘ ì¸¡ë“¤ì´ "many" ê°’ì„ ê°€ì§ˆ 경우, 우리는 ì´ê²ƒì„ many-to-many ì—°ê´€ì´ë¼ 명명한다. 그러므로, - 우리는 Hibernateì˜ many-to-many ë§¤í•‘ì„ ì‚¬ìš©í•œë‹¤: - - @@ -882,6 +864,7 @@ else if (args[0].equals("list")) { ]]> + Hibernate는 모든 ì¢…ë¥˜ì˜ ì½œë ‰ì…˜ 매핑들, 가장 공통ì ì¸ <set>ì„ ì§€ì›í•œë‹¤. many-to-many ì—°ê´€ (ë˜ëŠ” n:m 엔티티 관계)ì˜ ê²½ìš°, í•œ ê°œì˜ ì—°ê´€ í…Œì´ë¸”ì´ í•„ìš”í•˜ë‹¤. ì´ í…Œì´ë¸” ë‚´ì— ìžˆëŠ” ê°ê°ì˜ @@ -912,7 +895,7 @@ else if (args[0].equals("list")) { - + ì—°ê´€ë“¤ì— ìž‘ì—…í•˜ê¸° @@ -920,16 +903,16 @@ else if (args[0].equals("list")) { @@ -940,7 +923,9 @@ else if (args[0].equals("list")) { 프로í¼í‹°ë¥¼ ë³€ê²½í•¨ìœ¼ë¡œì¨ ê·¸ê²ƒì„ ì‹œë„í•  수 있다. ê·¸ê²ƒë“¤ì´ ì˜ì†(persistent) ìƒíƒœì— 있는 ë™ì•ˆ, 즉 특정 Hibernate Sessionì— ë°”ì¸ë“œë˜ì–´ 있는 ë™ì•ˆ(예를 들면. ê·¸ê²ƒë“¤ì€ ìž‘ì—… 단위 ì†ì— 방금 로드ë˜ì—ˆê±°ë‚˜ 저장ë˜ì—ˆë‹¤), Hibernate는 ìž„ì˜ì˜ ë³€ê²½ë“¤ì„ ëª¨ë‹ˆí„°ë§í•˜ê³  쓰기 ì´ë©´ì˜ 형태로 SQLì„ ì‹¤í–‰ì‹œí‚¨ë‹¤. 메모리 ìƒíƒœë¥¼ ë°ì´í„°ë² ì´ìŠ¤ì™€ ë™ê¸°í™” 시키는 - ê³¼ì •ì€ ëŒ€ê°œ ì˜¤ì§ ìž‘ì—… ë‹¨ìœ„ì˜ ëì—ì„œì´ê³ , flushingì´ë¼ 명명ëœë‹¤. + ê³¼ì •ì€ ëŒ€ê°œ ì˜¤ì§ ìž‘ì—… ë‹¨ìœ„ì˜ ëì—ì„œì´ê³ , flushingì´ë¼ 명명ëœë‹¤. ìš°ë¦¬ì˜ ì½”ë“œì—ì„œ, ìž‘ì—… 단위는 + CurrentSessionContext í´ëž˜ìŠ¤ì— 대한 thread 구성 ì˜µì…˜ì— ì˜í•´ ì •ì˜ëœ + 대로 - ë°ì´í„°ë² ì´ìŠ¤ íŠ¸ëžœìž­ì…˜ì˜ ì»¤ë°‹(ë˜ëŠ” 롤백)으로 ëì´ë‚œë‹¤. @@ -949,41 +934,54 @@ else if (args[0].equals("list")) { detachedë¼ê³  부른다). (매우 사실ì ì´ì§€ ì•Šì€) 코드 ë‚´ì—ì„œ ì´ê²ƒì€ 다ìŒê³¼ ê°™ì„ ìˆ˜ 있다: - + // Begin second unit of work + + Session session2 = HibernateUtil.getSessionFactory().getCurrentSession(); + session2.beginTransaction(); + + session2.update(aPerson); // Reattachment of aPerson + + session2.getTransaction().commit(); +}]]> - updateì— ëŒ€í•œ í˜¸ì¶œì€ í•œ ê°œì˜ detached ê°ì²´ë¥¼ ì˜ì†í™” 시키고, ë‹¹ì‹ ì€ ê·¸ê²ƒì´ ìƒˆë¡œìš´ ìž‘ì—… ë‹¨ìœ„ì— + updateì— ëŒ€í•œ í˜¸ì¶œì€ í•œ ê°œì˜ detached ê°ì²´ë¥¼ 다시 ì˜ì†í™” 시키고, ë‹¹ì‹ ì€ ê·¸ê²ƒì´ ìƒˆë¡œìš´ ìž‘ì—… ë‹¨ìœ„ì— ë°”ì¸ë“œëœë‹¤ê³  ë§í•  수 있고, ë”°ë¼ì„œ detached ë™ì•ˆì— ë‹¹ì‹ ì´ ê·¸ê²ƒì— ëŒ€í•´ 행한 ìž„ì˜ì˜ ë³€ê²½ë“¤ì´ ë°ì´í„°ë² ì´ìŠ¤ì— ì €ìž¥ë  ìˆ˜ 있다. + ì´ê²ƒì€ ë‹¹ì‹ ì´ ê·¸ 엔티티 ê°ì²´ì˜ ì½œë ‰ì…˜ì— ëŒ€í•´ í–‰í–ˆë˜ ìž„ì˜ì˜ 변경들(추가/ì‚­ì œ)를 í¬í•¨í•œë‹¤. - 물론, ì´ê²ƒì€ ìš°ë¦¬ì˜ í˜„ìž¬ ìƒí™©ì—ì„œ ë§Žì´ ì‚¬ìš©ë˜ì§€ 않지만, ê·¸ê²ƒì€ ë‹¹ì‹ ì´ ë‹¹ì‹  ìžì‹ ì˜ 어플리케ì´ì…˜ ì†ìœ¼ë¡œ 설계할 수 있는 중요한 - ê°œë…ì´ë‹¤. 지금 í•œ ê°œì˜ ìƒˆë¡œìš´ ì•¡ì…˜ì„ EventManagerì˜ main ë©”ì†Œë“œì— ì¶”ê°€í•˜ê³  명령 ë¼ì¸ì—ì„œ ê·¸ê²ƒì„ + 물론, ìš°ë¦¬ì˜ í˜„ìž¬ ìƒí™©ì—ì„œ ì´ê²ƒì€ ë§Žì´ ì‚¬ìš©ë˜ì§€ 않지만, ê·¸ê²ƒì€ ë‹¹ì‹ ì´ ë‹¹ì‹  ìžì‹ ì˜ 어플리케ì´ì…˜ ë‚´ë¡œ 설계할 수 있는 중요한 + ê°œë…ì´ë‹¤. 지금 EventManagerì˜ main ë©”ì†Œë“œì— í•œ ê°œì˜ ìƒˆë¡œìš´ ì•¡ì…˜ì„ ì¶”ê°€í•˜ê³  명령 ë¼ì¸ì—ì„œ ê·¸ê²ƒì„ í˜¸ì¶œí•˜ì—¬ ì´ ì—°ìŠµì„ ì™„ë£Œí•˜ë¼. ë§Œì¼ ë‹¹ì‹ ì´ í•œëª…ì˜ ê°œì¸ê³¼ í•œ ê°œì˜ ì´ë²¤íŠ¸ì— 대한 ì‹ë³„ìžë“¤ì„ 필요로 í•  경우 - save() - 메소드가 ê·¸ê²ƒì„ ë°˜í™˜ì‹œí‚¨ë‹¤. + 메소드가 ê·¸ê²ƒì„ ë°˜í™˜ì‹œí‚¨ë‹¤(ë‹¹ì‹ ì€ ê·¸ ì‹ë³„ìžë¥¼ 반환시키는 ì•žì˜ ë©”ì†Œë“œë“¤ 중 ëª‡ëª‡ì„ ë³€ê²½ì‹œì¼œì•¼ í•  것ì´ë‹¤): + + ì´ê²ƒì€ ë‘ ê°œì˜ ë™ë“±í•˜ê²Œ 중요한 í´ëž˜ìŠ¤ë“¤, ë‘ ê°œì˜ ì—”í‹°í‹°ë“¤ 사ì´ì—ì„œ í•œ ê°œì˜ ì—°ê´€ì— ê´€í•œ 예제였다. ì•žì„œ 언급했듯ì´, 전형ì ì¸ 모형 ë‚´ì—는 다른 í´ëž˜ìŠ¤ë“¤ê³¼ 타ì´ë“¤ì´ 존재하는ë°, 대개 "ëœ ì¤‘ìš”í•˜ë‹¤". ë‹¹ì‹ ì€ ì´ë¯¸ int ë˜ëŠ” Stringê³¼ @@ -1065,9 +1063,29 @@ public void setEmailAddresses(Set emailAddresses) { ê·¸ê²ƒì€ Javaì—ì„œ ë™ì¼í•œ 코드ì´ë‹¤. + + + + 지금 우리는 ì½œë ‰ì…˜ì„ ì´ˆê¸°í™” ì‹œí‚¤ëŠ”ë° fetch 질ì˜ë¥¼ 사용하지 않았다. + 그러므로 ì½œë ‰ì…˜ì˜ getter ë©”ì†Œë“œì— ëŒ€í•œ í˜¸ì¶œì€ ì½œë ‰ì…˜ì„ ì´ˆê¸°í™” 시키기 위해 추가ì ì¸ select를 트리거 시킬 + 것ì´ì–´ì„œ, 우리는 ê·¸ê²ƒì— ìš”ì†Œë¥¼ 추가시킬 수 있다. SQL 로그를 관찰하고 ì´ê²ƒì„ eager fetchë¡œ 최ì í™” 시키려고 + ì‹œë„하ë¼. + + - + Bi-directional associations @@ -1097,7 +1115,7 @@ public void setParticipants(Set participants) { - + ]]> @@ -1183,7 +1201,7 @@ public void removeFromEvent(Event event) { ê·¸ê²ƒì€ ìƒˆë¡œìš´ ì´ë²¤íŠ¸ë“¤ì„ 입력하기 위한 HTML formì„ ì œê³µí•œë‹¤. - + 기본 서블릿 작성하기 @@ -1198,17 +1216,9 @@ public void removeFromEvent(Event event) { public class EventManagerServlet extends HttpServlet { - private final SimpleDateFormat dateFormatter = - new SimpleDateFormat("dd.MM.yyyy"); - // Servlet code }]]> - - dateFormatter는 ë‚˜ì¤‘ì— ë¬¸ìžì—´ë“¤ë¡œë¶€í„° 그리고 문ìžì—´ë¡œ Date ê°ì²´ë“¤ì„ - ë³€í™˜í•˜ëŠ”ë° ë‚˜ì¤‘ì— ì‚¬ìš©í•˜ê²Œ ë  ë„구ì´ë‹¤. ì„œë¸”ë¦¿ì˜ ë©¤ë²„ë¡œì„œ ì˜¤ì§ í•œ ê°œì˜ formatter를 갖는 ê²ƒì´ ë„ë¦¬ì— ë§žë‹¤. - - ì„œë¸”ë¦¿ì€ HTTP GET 요청들 ë§Œì„ ì²˜ë¦¬í•˜ë¯€ë¡œ, 우리가 구현하는 메소드는 doGet()ì´ë‹¤: @@ -1217,6 +1227,8 @@ public class EventManagerServlet extends HttpServlet { HttpServletResponse response) throws ServletException, IOException { + SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy"); + try { // Begin unit of work HibernateUtil.getSessionFactory() @@ -1259,7 +1271,7 @@ public class EventManagerServlet extends HttpServlet { - + 프로세싱과 ë Œë”ë§ @@ -1286,7 +1298,7 @@ if ( "store".equals(request.getParameter("action")) ) { // Print page printEventForm(out); -listEvents(out); +listEvents(out, dateFormatter); // Write HTML footer out.println(""); @@ -1315,7 +1327,8 @@ out.close();]]> ì“°ë ˆë“œì— ê²°í•©ëœ Hibernate Sessionì„ ì‚¬ìš©í•œë‹¤: - 0) { diff --git a/reference/ko/styles/fopdf.xsl b/reference/ko/styles/fopdf.xsl index 3f52c84a3c..77f4766ed2 100644 --- a/reference/ko/styles/fopdf.xsl +++ b/reference/ko/styles/fopdf.xsl @@ -43,10 +43,10 @@ - + - + 버전: @@ -92,7 +92,7 @@ - 하ì´ë²„네ì´íŠ¸ + 하ì´ë²„네ì´íŠ¸ @@ -256,10 +256,10 @@ ################################################### --> - 11 + 10 - 1.4 + 1.6 @@ -311,7 +311,6 @@ - @@ -516,9 +515,9 @@ false - Gulim - - ê°€ì„ì²´ + Hankc + + Bangwool