From: <hib...@li...> - 2006-08-03 15:19:33
|
Author: jdkim528 Date: 2006-08-03 11:19:26 -0400 (Thu, 03 Aug 2006) New Revision: 10200 Modified: trunk/Hibernate3/doc/reference/ko/modules/configuration.xml trunk/Hibernate3/doc/reference/ko/modules/events.xml trunk/Hibernate3/doc/reference/ko/modules/query_sql.xml trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml Log: 3.2 cr3 Modified: trunk/Hibernate3/doc/reference/ko/modules/configuration.xml =================================================================== --- trunk/Hibernate3/doc/reference/ko/modules/configuration.xml 2006-08-03 14:42:53 UTC (rev 10199) +++ trunk/Hibernate3/doc/reference/ko/modules/configuration.xml 2006-08-03 15:19:26 UTC (rev 10200) @@ -871,7 +871,7 @@ </tgroup> </table> - <table frame="topbot" id="configuration-misc-properties" revision="9"> + <table frame="topbot" id="configuration-misc-properties" revision="10"> <title>여러가지 프로퍼티들</title> <tgroup cols="2"> <colspec colname="c1" colwidth="1*"/> @@ -889,12 +889,12 @@ </entry> <entry> "현재" <literal>Session</literal>의 영역화를 위한 하나의 (맞춤) 방도를 - 공급한다. 빌드되어 있는 방도들에 대한 추가 정보는 + 제공한다. 빌드되어 있는 방도들에 대한 추가 정보는 <xref linkend="architecture-current-session"/>를 보라. <para> <emphasis role="strong">예.</emphasis> - <literal>jta</literal> | <literal>thread</literal> | - <literal>custom.Class</literal> + <literal>jta</literal> | <literal>thread</literal> | + <literal>managed</literal> | <literal>custom.Class</literal> </para> </entry> </row> @@ -906,7 +906,7 @@ Chooses the HQL 파서 구현을 선택한다. <para> <emphasis role="strong">예.</emphasis> - <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> 또는 + <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal> </para> </entry> @@ -916,7 +916,8 @@ <literal>hibernate.query.substitutions</literal> </entry> <entry> - Hibernate 질의들 내의 토큰들로부터 SQL 토큰들로의 매핑(예를 들어 토큰들은 함수 이름 또는 리터럴 이름일 수 있다). + Hibernate 질의들 내의 토큰들로부터 SQL 토큰들로의 매핑 + (예를 들어 토큰들은 함수 이름 또는 리터럴 이름일 수 있다). <para> <emphasis role="strong">예.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal> @@ -928,8 +929,10 @@ <literal>hibernate.hbm2ddl.auto</literal> </entry> <entry> - <literal>SessionFactory</literal>가 생성될 때 스키마 DDL을 데이터베이스로 자동적으로 유효성 검사하거나 내보내기 한다. <literal>create-drop</literal>의 경우, - <literal>SessionFactory</literal>가 명시적으로 닫혀질 때,, 데이터베이스 스키마가 드롭될 것이다. + <literal>SessionFactory</literal>가 생성될 때, 자동적으로 유효성을 검사하거나 + schema DDL을 데이터베이스로 내보내기 한다. <literal>create-drop</literal>의 경우, + <literal>SessionFactory</literal>가 명시적으로 닫혀질 때 데이터베이스 스키마가 + 드롭될 것이다. <para> <emphasis role="strong">예.</emphasis> <literal>validate</literal> | <literal>update</literal> | @@ -942,8 +945,10 @@ <literal>hibernate.cglib.use_reflection_optimizer</literal> </entry> <entry> - 런타임 reflection 대신에 CGLIB의 사용을 가능하도록 만든다(시스템 레벨 프로퍼티). Reflection은 문제가 발생할 시에 때때로 유용할 수 있고, - 당신이 optimizer를 사용하지 않을 경우조차도 Hibernate는 항상 필요로 함을 유의하라. 당신은 <literal>hibernate.cfg.xml</literal> + 런타임 reflection 대신에 CGLIB의 사용을 가능하도록 만든다(시스템 레벨 프로퍼티). + Reflection은 문제가 발생할 시에 때때로 유용할 수 있고, + 당신이 optimizer를 사용하지 않을 경우조차도 Hibernate는 항상 필요로 함을 유의하라. + 당신은 <literal>hibernate.cfg.xml</literal> 속에 이 프로퍼티를 설정할수 없다. <para> <emphasis role="strong">예.</emphasis> Modified: trunk/Hibernate3/doc/reference/ko/modules/events.xml =================================================================== --- trunk/Hibernate3/doc/reference/ko/modules/events.xml 2006-08-03 14:42:53 UTC (rev 10199) +++ trunk/Hibernate3/doc/reference/ko/modules/events.xml 2006-08-03 15:19:26 UTC (rev 10200) @@ -6,7 +6,7 @@ 그리고 Hibernate의 확장 기능의 구현을 허용해준다. </para> - <sect1 id="objectstate-interceptors" revision="2"> + <sect1 id="objectstate-interceptors" revision="3"> <title>인터셉터들</title> <para> @@ -106,12 +106,13 @@ }]]></programlisting> <para> - 세션이 생성될 때 인터셉터가 지정될 것이다. + 인터셉터들은 다음 두 개의 특징들로 나타난다: <literal>Session</literal>-영역화 그리고 + <literal>SessionFactory</literal>-영역화. </para> <para> - <literal>Session</literal>-영역의 인터셉터는 <literal>Interceptor</literal>를 수용하는 - 하나의 세션이 오버로드된 SessionFactory.openSession() 메소드들 중 하나를 사용하여 열릴 때 + <literal>Session</literal>-영역의 인터셉터는 세션이 하나의 <literal>Interceptor</literal>를 수용하는 + 오버로드된 SessionFactory.openSession() 메소드들 중 하나를 사용하여 열릴 때 지정된다. </para> @@ -122,23 +123,34 @@ 이 경우에, 인터셉터는 threadsafe이어야 한다. </para> + <programlisting><![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]></programlisting> + + <para> + <literal>SessionFactory</literal>-영역의 인터셉터는 <literal>SessionFactory</literal>을 빌드하기에 앞서 + <literal>Configuration</literal> 객체에 등록된다. 이 경우에, 공급되는 인터셉터는 그 <literal>SessionFactory</literal>로부터 + 열려진 모든 세션들에 적용될 것이다; 하나의 세션이 사용할 인터셉터를 명시적으로 지정하여 열리지 않는 한 이것은 참이다. + <literal>SessionFactory</literal>-영역의 인터셉터들은 세션-지정적인 상태를 저장하지 않도록 주의하여 쓰레드-안전해야 한다. + 왜냐하면 다중 세션들은 (잠정적으로) 이 인터셉터를 동시적으로 사용할 것이기 때문이다. + </para> + <programlisting><![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]></programlisting> </sect1> - <sect1 id="objectstate-events" revision="3"> + <sect1 id="objectstate-events" revision="4"> <title>이벤트 시스템</title> <para> - 만일 당신이 당신의 영속 계층에서 특별한 이벤트들에 대해 반응해야 한다면, 당신은 또한 Hibernate3 <emphasis>이벤트</emphasis> + 만일 당신이 당신의 영속 계층에서 특정 이벤트들에 대해 반응해야 한다면, 당신은 또한 Hibernate3 <emphasis>event</emphasis> 아키텍처를 사용할 수도 있다. 이벤트 시스템은 부가물로 사용될 수 있거나 인터셉터들에 대한 대체물로 사용될 수 있다. </para> <para> - 본질적으로 <literal>Session</literal> 인터페이스의 모든 메소드들은 이벤트와 서로 관련되어 있다. 당신은 <literal>LoadEvent</literal>, + 본질적으로 <literal>Session</literal> 인터페이스의 모든 메소드들은 이벤트와 서로 관련되어 있다. + 당신은 <literal>LoadEvent</literal>, <literal>FlushEvent</literal>, 등을 갖는다 (정의된 이벤트 타입들의 전체 리스트에 대해서는 XML 구성 파일 DTD 또는 <literal>org.hibernate.event</literal> 패키지를 참조하라). 하나의 요청이 이들 메소드들 중 하나에 의해 만들어질 때, - Hibernate <literal>Session</literal>은 적절한 이벤트를 생성시키고 그것을 그 타입에 대한 구성된 이벤트 리스너에게 전달한다. + Hibernate <literal>Session</literal>은 적절한 이벤트를 생성시키고 그것을 그 타입의 구성된 이벤트 리스너에게 전달한다. 박싱없이, 이들 리스너들은 그들 메소드들이 항상 귀결되었던 동일한 프로세싱을 구현한다. 하지만 당신이 리스너 인터페이스들 중 하나의 맞춤을 구현하는 것이 자유롭고(예를 들어 <literal>LoadEvent</literal>는 <literal>LoadEventListener</literal> 인터페이스의 등록된 구현에 의해 처리된다), 그 경우에 그들 구현은 <literal>Session</literal>에 대해 행해진 임의의 <literal>load()</literal> @@ -152,10 +164,10 @@ <para> 맞춤형 리스너는 그것이 편의적인 기저 클래스들(또는 리스너들이 이 용도로 final이 아닌 것으로 선언되므로 Hibernate - out-of-the-box에 의해 사용된 디폴트 이벤트 리스너들) 중 하나를 처리하고자 그리고/또는 확장하고자 원하는 이벤트들에 대해 + out-of-the-box에 의해 사용된 디폴트 이벤트 리스너들) 중 하나를 처리하고/하거나 확장하고자 원하는 이벤트들에 대해 적절한 인터페이스를 구현해야 한다. 맞춤형 리스너들은 <literal>Configuration</literal> 객체를 통해 프로그램 상으로 등록될 수 있거나, Hibernate 구성 XML 속에 지정될 수 있다 (properties 파일을 통한 선언적인 구성은 지원되지 않는다). - 다음은 맞춤형 load 이벤트 리스너에 대한 예제이다: + 다음은 맞춤형 load 이벤트 리스너에 대한 예제이다: </para> <programlisting><![CDATA[public class MyLoadListener implements LoadEventListener { @@ -191,13 +203,13 @@ cfg.EventListeners().setLoadEventListeners(stack);]]></programlisting> <para> - 선언적으로 등록된 리스너들은 인스턴스들을 공유할 수 없다. 만일 동일한 클래스 이름이 여러 <literal><listener/></literal> + 선언적으로 등록된 리스너들은 인스턴스들을 공유할 수 없다. 만일 동일한 클래스 이름이 여러 개의 <literal><listener/></literal> 요소들에서 사용될 경우, 각각의 참조는 그 클래스에 대한 별도의 인스턴스로 귀결될 것이다. 만일 당신이 리스너 타입들 사이에서 리스너 인스턴스들을 공유할 가용성을 필요로 할 경우 당신은 프로그래밍 방식의 등록 접근법을 사용해야 한다. </para> <para> - 컨피그레이션 동안에 왜 인터페이스를 구현하고 특정 타입을 지정하는가? 물론 리스너 구현은 여러 개의 이벤트 리스너 인터페이스들을 + 구성 동안에 왜 인터페이스를 구현하고 특정 타입을 지정하는가? 물론 리스너 구현은 여러 개의 이벤트 리스너 인터페이스들을 구현할 수 있다. 등록 동안에 추가적으로 타입을 정의하는 것은 컨피그레이션 동안에 맞춤형 리스너들의 사용 여부를 전환시키는 것을 더 쉽게 해준다. </para> Modified: trunk/Hibernate3/doc/reference/ko/modules/query_sql.xml =================================================================== --- trunk/Hibernate3/doc/reference/ko/modules/query_sql.xml 2006-08-03 14:42:53 UTC (rev 10199) +++ trunk/Hibernate3/doc/reference/ko/modules/query_sql.xml 2006-08-03 15:19:26 UTC (rev 10200) @@ -116,7 +116,7 @@ ]]></programlisting> <para>이것은 cat.getDog()이 고유하게 기능하는 것을 허용한다.</para> - <sect2> + </sect2> <sect2> <title>연관들과 콜렉션들을 처리하기</title> Modified: trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml =================================================================== --- trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml 2006-08-03 14:42:53 UTC (rev 10199) +++ trunk/Hibernate3/doc/reference/ko/modules/tutorial.xml 2006-08-03 15:19:26 UTC (rev 10200) @@ -1,7 +1,7 @@ <chapter id="tutorial"> <title>Hibernate 개요</title> - <sect1 id="tutorial-intro"> + <sect1 id="tutorial-intro" revision="1"> <title>머리말</title> <para> @@ -67,15 +67,17 @@ 다음으로 우리는 우리가 데이터베이스 속에 저장시키고자 원하는 이벤트를 표현하는 한 개의 클래스를 생성시킨다. </para> - <sect2 id="tutorial-firstapp-firstclass"> + <sect2 id="tutorial-firstapp-firstclass" revision="1"> <title>첫 번째 클래스</title> <para> 우리의 첫 번째 영속 클래스는 몇몇 프로퍼티들을 가진 간단한 자바빈즈 클래스이다: </para> - <programlisting><![CDATA[import java.util.Date; + <programlisting><![CDATA[package events; +import java.util.Date; + public class Event { private Long id; @@ -117,14 +119,14 @@ </para> <para> - <literal>id</literal> 프로퍼티는 특별한 이벤트를 위한 유일 식별자를 소유한다. 만일 우리가 Hibernate의 - 전체 특징을 사용하고자 원할 경우 모든 영속 엔티티 클래스들(보다 덜 중요한 종속 클래스들 또한 존재한다)은 그런 - 식별자 프로퍼티를 필요로 할 것이다. 사실 대부분의 어플리케이션들(특히 웹 어플리케이션들)은 식별자에 의해 - 객체들을 구분지을 필요가 있어서, 당신은 이것을 어떤 제한이라기 보다는 하나의 특징으로 간주할 것이다. 하지만 - 우리는 대개 객체의 항등(identity)를 처리하지 않으므로, setter 메소드는 private이어야 한다. 객체가 저장될 때, - Hibernate는 단지 식별자를 할당할 것이다. 당신은 Hibernate가 public, private, protected 접근자 메소드들 - 뿐만 아니라 (public, private, protected) 필드들에도 직접 접근할 수 있음을 알 수 있다. 선택은 당신에게 달려 - 있으며, 당신은 당신의 어플리케이션 설계에 적합하도록 그것을 부합시킬 수 있다. + <literal>id</literal> 프로퍼티는 특별한 이벤트를 위한 유일 식별자를 소유한다. 모든 영속 엔티티 클래스들 + (보다 덜 중요한 종속 클래스들도 존재한다)은 우리가 Hibernate의 전체 특징 집합을 사용하고자 원할 경우에 + 그런 식별자 프로퍼티를 필요로 할 것이다. 사실 대부분의 어플리케이션들(특히 웹 어플리케이션들)은 식별자에 의해 + 객체들을 구분지을 필요가 있어서, 당신은 이것을 어떤 제약점이라기 보다는 하나의 특징으로 간주할 것이다. 하지만 + 우리는 대개 객체의 항등(identity)를 처리하지 않으므로, setter 메소드는 private이어야 한다. 객체가 저장될 때, + Hibernate는 단지 식별자들을 할당할 것이다. 당신은 Hibernate가 public, private, protected 접근자 메소드들 + 뿐만 아니라 (public, private, protected) 필드들에도 직접 접근할 수 있음을 알 수 있다. 선택은 당신에게 달려 + 있으며, 당신은 당신의 어플리케이션 설계에 적합하도록 그것을 부합시킬 수 있다. </para> <para> @@ -134,7 +136,7 @@ </para> <para> - 이 Java 노스 파일을 개발 폴더 내의 <literal>src</literal>로 명명된 디렉토리 속에 있는 위치지워라. 이제 + 이 Java 소스 파일을 개발 폴더 내의 <literal>src</literal>로 명명된 디렉토리 속에 있는 위치지워라. 이제 그 디렉토리는 다음과 같을 것이다: </para> @@ -723,9 +725,9 @@ </listitem> <listitem> <para> - 이제 당신의 <literal>hibernate.cfg.xml</literal> 파일 속에서 프로퍼티를 주석처리함으로써 hbm2ddl을 - 사용불가능하게 하라. 대개 당신은 지속되는 단위 테스팅에서 그것을 사용 가능하게 내버려두어도 되지만, 또 다른 - hbm2ddl의 실행은 당신이 저장했던 모든 것을 <emphasis>드롭</emphasis>시킬 것이다 - <literal>create</literal> + 이제 당신의 <literal>hibernate.cfg.xml</literal> 파일 속에서 그 프로퍼티를 주석처리함으로써 hbm2ddl을 + 사용불가능하게 하라. 대개 당신은 지속되는 단위 테스팅에서는 그것을 사용 가능하게 내버려두어도 되지만, 또 다른 + hbm2ddl의 실행은 당신이 저장했던 모든 것을 <emphasis>drop</emphasis>시킬 것이다 - <literal>create</literal> 구성 설정은 실제로 "스키마로부터 모든 테이블들을 드롭시키고 나서, SessionFactory가 빌드될 때 모든 테이블들을 다시 생성시키는 것"으로 변환된다. </para> @@ -756,7 +758,7 @@ 우리는 우리의 어플리케이션에 사람들을 추가하고 그들이 참여하는 이벤트들의 목록을 저장할 것이다. </para> - <sect2 id="tutorial-associations-mappinguser"> + <sect2 id="tutorial-associations-mappinguser" revision="1"> <title>Person 클래스 매핑하기</title> <para> |