|
Hibernate example source code file (transactions.po)
This example Hibernate source code file (transactions.po) is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.
The Hibernate transactions.po source code
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
"POT-Creation-Date: 2010-02-04T04:51:22\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. Tag: title
#, fuzzy, no-c-format
msgid "Transactions and Concurrency"
msgstr "트랜ìžì…˜ë“¤ê³¼ ë™ì‹œì„±"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The most important point about Hibernate and concurrency control is that it "
"is easy to understand. Hibernate directly uses JDBC connections and JTA "
"resources without adding any additional locking behavior. It is recommended "
"that you spend some time with the JDBC, ANSI, and transaction isolation "
"specification of your database management system."
msgstr ""
"Hibernate와 ë™ì‹œì„± ì œì–´ì— ëŒ€í•œ 가장 중요한 ì ì€ ì´í•´í•˜ê¸°ê°€ 매우 쉽다는 ì ì´"
"다. Hibernate는 ì–´ë–¤ 추가ì ì¸ ìž ê¸ˆ 행위 ì—†ì´ JDBC 커넥션들과 JTA ë¦¬ì†ŒìŠ¤ë“¤ì„ "
"ì§ì ‘ 사용한다. 우리는 ë‹¹ì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ 관리 ì‹œìŠ¤í…œì˜ JDBC, ANSI, ê·¸ë¦¬ê³ íŠ¸"
"ëžœìžì…˜ 격리 ëª…ì„¸ì— ì•½ê°„ì˜ ì‹œê°„ì„ í• ì• í• ê²ƒì„ ë§¤ìš° 권장한다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Hibernate does not lock objects in memory. Your application can expect the "
"behavior as defined by the isolation level of your database transactions. "
"Through <literal>Session, which is also a transaction-scoped "
"cache, Hibernate provides repeatable reads for lookup by identifier and "
"entity queries and not reporting queries that return scalar values."
msgstr ""
"Hibernate는 메모리 ë‚´ì—ì„œ ê°ì²´ë“¤ì„ ìž ê·¸ì§€ 않는다. ë‹¹ì‹ ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì€ 격리 "
"ë ˆë²¨ì— ì˜í•´ ì •ì˜ëœ 대로 행위를 ê¸°ëŒ€í• ìˆ˜ 있다. ë˜í•œ transaction-ì˜ì—ì˜ ìºì‹œ"
"ì¸ <literal>Session ë•ë¶„ì—, Hibernate는 (ìŠ¤ì¹¼ë¼ ê°’ë“¤ì„ ë°˜í™˜í•˜ëŠ” 질"
"ì˜ë“¤ì„ ë³´ê³ í•˜ì§€ 않는) ì‹ë³„ìžì™€ 엔티티 질ì˜ë“¤ì— ì˜í•œ ë£©ì—…ì„ ìœ„í•´ 반복 가능한 "
"ì½ê¸°ë¥¼ ì œê³µí•œë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"In addition to versioning for automatic optimistic concurrency control, "
"Hibernate also offers, using the <literal>SELECT FOR UPDATE "
"syntax, a (minor) API for pessimistic locking of rows. Optimistic "
"concurrency control and this API are discussed later in this chapter."
msgstr ""
"ìžë™ì ì¸ optimistic ë™ì‹œì„± ì œì–´ë¥¼ 위한 ë²„ì „í™”ì— ë§ë¶™ì—¬, Hibernate는 ë˜í•œ "
"<literal>SELECT FOR UPDATE êµ¬ë¬¸ì„ ì‚¬ìš©í•˜ì—¬ í–‰ë“¤ì— ëŒ€í•œ pessimistic "
"ìž ê¸ˆì„ ìœ„í•œ í•˜ë‚˜ì˜ (마ì´ë„ˆ)API를 ì œê³µí•œë‹¤. optimistic ë™ì‹œì„± ì œì–´ì™€ ì´ API는 "
"ì´ ìž¥ì˜ ë’·ë¶€ë¶„ì—ì„œ ë…¼ì˜ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The discussion of concurrency control in Hibernate begins with the "
"granularity of <literal>Configuration, SessionFactorySession, as well as database transactions "
"and long conversations."
msgstr ""
"우리는 <literal>Configuration, SessionFactory, "
"<literal>Session, 알갱ì´ë¥¼ 가진 Hibernateì—ì„œì˜ ë™ì‹œì„± ì œì–´ ë¿ë§Œ ì•„"
"ë‹ˆë¼ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ê³¼ ìž¥ê¸°ê°„ì— ê±¸ì¹œ (컴퓨터와ì˜)ëŒ€í™”ë“¤ì— ëŒ€í•œ ë…¼ì˜ë¥¼ "
"시작한다."
#. Tag: title
#, no-c-format
msgid "Session and transaction scopes"
msgstr "세션 ì˜ì—ê³¼ 트랜ìžì…˜ ì˜ì—"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"A <literal>SessionFactory is an expensive-to-create, threadsafe "
"object, intended to be shared by all application threads. It is created "
"once, usually on application startup, from a <literal>Configuration는 ëª¨ë“ ì–´í”Œë¦¬ì¼€ì´ì…˜ ì“°ë ˆë“œë“¤ì— ì˜í•´ ê³µìœ ë˜"
"ë„ë¡ ê³ ì•ˆëœ ìƒì„±ì— ë¹„ìš©ì´ ë“œëŠ”, ì“°ë ˆë“œì•ˆì „(threadsafe) ê°ì²´ì´ë‹¤. ê·¸ê²ƒì€ ëŒ€ê°œ "
"어플리케ì´ì…˜ 시작 ì‹œì— <literal>Configuration ì¸ìŠ¤í„´ìŠ¤ë¡œë¶€í„° 한번 "
"ìƒì„±ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"A <literal>Session is an inexpensive, non-threadsafe object that "
"should be used once and then discarded for: a single request, a conversation "
"or a single unit of work. A <literal>Session will not obtain a "
"JDBC <literal>Connection, or a Datasource, "
"unless it is needed. It will not consume any resources until used."
msgstr ""
"<literal>Sessionì€ í•˜ë‚˜ì˜ ìš”ì², í•˜ë‚˜ì˜ ëŒ€í™” , í•˜ë‚˜ì˜ ìž‘ì—… 단위를 위"
"í•´ 한번만 사용ë˜ê³ 나서 í기ë ì˜ˆì •ì¸, ë¹„ìš©ì´ ë“¤ì§€ 않는, ì“°ë ˆë“œ ì•ˆì „í•˜ì§€ ì•Š"
"ì€ ê°ì²´ì´ë‹¤. <literal>Sessionì€ ì»¤ë„¥ì…˜ì´ í•„ìš”í•˜ì§€ 않으면 í•˜ë‚˜ì˜ "
"JDBC <literal>Connection(ë˜ëŠ” Datasource)를 ì–»"
"지 ì•Šì„ ê²ƒì´ë¯€ë¡œ, 사용ë 때까지 ë¦¬ì†ŒìŠ¤ë“¤ì„ ì†Œë¹„í•˜ì§€ 않는다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"In order to reduce lock contention in the database, a database transaction "
"has to be as short as possible. Long database transactions will prevent your "
"application from scaling to a highly concurrent load. It is not recommended "
"that you hold a database transaction open during user think time until the "
"unit of work is complete."
msgstr ""
"ì´ ê·¸ë¦¼ì„ ì™„ì„±í•˜ê¸° 위해 ë‹¹ì‹ ì€ ë˜í•œ ë°ì´í„°ë² ì´ìŠ¤ íŠ¸ëžœìž¬ì…˜ë“¤ì— ëŒ€í•´ ìƒê°í•´ì•¼ "
"한다. ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì€ ë°ì´í„°ë² ì´ìŠ¤ì—ì„œ ìž ê¸ˆ ë‹¤íˆ¼ì„ ì¤„ì´ê¸° 위해 가능"
"í•œ 짧아야 한다. 긴 ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ë“¤ì€ ë‹¹ì‹ ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì´ ê³ ë„ì˜ ë™"
"시성 ë¡œë“œë¡œì˜ ê°€ìš©ì„±ì„ ë†’ì´ëŠ” ê²ƒì„ ë°©í•´í• ê²ƒì´ë‹¤. 그러므로 사용ìžê°€ ìƒê°í•˜ëŠ” "
"시간 ë™ì•ˆ 단위 ìž‘ì—…ì´ ì™„ë£Œë 때까지 ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì„ ì—´ë ¤ì§„ì±„ë¡œ ì†Œìœ í•˜"
"는 ê²ƒì€ ëŒ€ê°œ ê²°ì½” ì¢‹ì€ ì„¤ê³„ëŠ” 아니다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"What is the scope of a unit of work? Can a single Hibernate "
"<literal>Session span several database transactions, or is this a "
"one-to-one relationship of scopes? When should you open and close a "
"<literal>Session and how do you demarcate the database transaction "
"boundaries? These questions are addressed in the following sections."
msgstr ""
"í•˜ë‚˜ì˜ ìž‘ì—… ë‹¨ìœ„ì˜ ì˜ì—ì€ ë¬´ì—‡ì¸ê°€? í•˜ë‚˜ì˜ Hibernate <literal>Sessionì„ ì—´ê³ ë‹«ëŠ”ê°€ "
"ê·¸ë¦¬ê³ ë‹¹ì‹ ì€ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ ê²½ê³„ë“¤ì„ ì–´ë–»ê²Œ í•œì •í•˜ëŠ”ê°€?"
#. Tag: title
#, no-c-format
msgid "Unit of work"
msgstr "작업 단위"
#. Tag: para
#, no-c-format
msgid ""
"First, let's define a unit of work. A unit of work is a design pattern "
"described by Martin Fowler as <quote> [maintaining] a list of objects "
"affected by a business transaction and coordinates the writing out of "
"changes and the resolution of concurrency problems. </quote>PoEAA antipattern: do "
"not open and close a <literal>Session for every simple database "
"call in a single thread. The same is true for database transactions. "
"Database calls in an application are made using a planned sequence; they are "
"grouped into atomic units of work. This also means that auto-commit after "
"every single SQL statement is useless in an application as this mode is "
"intended for ad-hoc SQL console work. Hibernate disables, or expects the "
"application server to disable, auto-commit mode immediately. Database "
"transactions are never optional. All communication with a database has to "
"occur inside a transaction. Auto-commit behavior for reading data should be "
"avoided, as many small transactions are unlikely to perform better than one "
"clearly defined unit of work. The latter is also more maintainable and "
"extensible."
msgstr ""
"첫번째로, <emphasis>session-per-operation anti-íŒ¨í„´ì„ ì‚¬ìš©í•˜ì§€ ë§"
"ë¼. 즉, ë‹¨ì¼ ì“°ë ˆë“œ ë‚´ì—ì„œ ëª¨ë“ ê°„ë‹¨í•œ ë°ì´í„°ë² ì´ìŠ¤ í˜¸ì¶œì— ëŒ€í•´ "
"<literal>Sessionì„ ì—´ê³ ë‹«ì§€ ë§ë¼! ë¬¼ë¡ ê°™ì€ ê²ƒì´ ë°ì´í„°ë² ì´ìŠ¤ 트랜"
"ìžì…˜ë“¤ì— ëŒ€í•´ì„œë„ ì°¸ì´ë‹¤. 어플리케ì´ì…˜ ë‚´ì˜ ë°ì´í„°ë² ì´ìŠ¤ í˜¸ì¶œë“¤ì€ ê³„íšëœ 순서"
"를사용하여 행해지며, ê·¸ê²ƒë“¤ì€ ì›ìž ìž‘ì—… 단위 ì†ìœ¼ë¡œ 그룹지워진다. (ì´ê²ƒì€ ë˜"
"í•œ ëª¨ë“ í•˜ë‚˜ì˜ SQL 문장 ë’¤ì˜ auto-commit(ìžë™-커밋)ì´ ì–´í”Œë¦¬ì¼€ì´ì…˜ ë‚´ì—ì„œ 무"
"ìš©ì§€ë¬¼ìž„ì„ ì˜ë¯¸í•˜ê³ , ì´ ëª¨ë“œê°€ SQL 콘솔 ìž‘ì—…ì„ ë•ë„ë¡ ê³ ì•ˆë˜ì—ˆìŒì„ 노트하ë¼. "
"Hibernate는 ì˜ë¯¸í•˜ê³ , ì´ ëª¨ë“œëŠ” Hibernate는 즉시 ìžë™-커밋 모드를 사용 불가능"
"하게 하거나, 어플리케ì´ì…˜ 서버가 ê·¸ë ‡ê²Œ í–‰í•˜ê³ , 즉시 ìžë™-커밋시키는 ê²ƒì„ ì‚¬"
"용불가능하게 하거나 ,ê·¸ë ‡ê²Œ 행하는 ê²ƒì„ ê¸°ëŒ€í•œë‹¤.) ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ë“¤ì€ "
"ê²°ì½” ì˜µì…˜ì´ ì•„ë‹ˆë©°, í•˜ë‚˜ì˜ ë°ì´í„°ë² ì´ìŠ¤ì™€ì˜ ëª¨ë“ í†µì‹ ì€ ë‹¹ì‹ ì´ ë°ì´í„°ë¥¼ ì½ë“ "
"ì“°ë‹¨ê°„ì— ìƒê´€ì—†ì´ í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ ë‚´ì—ì„œ ë°œìƒí•´ì•¼ 한다. 설명하였듯ì´, ë°ì´í„° "
"ì½ê¸°ë¥¼ 위한 auto-commit íŠ¹ì§•ì„ í”¼í•´ì•¼ í• ê²ƒì´ë©°, ë§Žì€ ìž‘ì€ íŠ¸ëžœìžì…˜ë“¤ì€ 하나"
"ì˜ ëª…ë£Œí•˜ê²Œ ì •ì˜ëœ ìž‘ì—… 단위보다 ë” ì¢‹ê²Œ 수행ë 것 같지 않다. 후ìžê°€ ë˜í•œ 훨"
"씬 ë” ìœ ì§€ê°€ëŠ¥í•˜ê³ í™•ìž¥ì ì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The most common pattern in a multi-user client/server application is "
"<emphasis>session-per-request. In this model, a request from the "
"client is sent to the server, where the Hibernate persistence layer runs. A "
"new Hibernate <literal>Session is opened, and all database "
"operations are executed in this unit of work. On completion of the work, and "
"once the response for the client has been prepared, the session is flushed "
"and closed. Use a single database transaction to serve the clients request, "
"starting and committing it when you open and close the <literal>Sessionì´ë‹¤. ì´ ëª¨í˜•ì—ì„œ, í´ë¼ì´ì–¸íŠ¸ë¡œë¶€í„°"
"ì˜ ìš”ì²ì€ (Hibernate ì˜ì† ê³„ì¸µì´ ì‹¤í–‰ë˜ëŠ”) 서버로 ì „ì†¡ë˜ê³ , 새로운 Hibernate "
"<literal>Sessionì´ ì—´ë ¤ì§€ê³ , ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ 오í¼ë ˆì´ì…˜ë“¤ì´ ì´ ìž‘"
"ì—… 단위 ë‚´ì—ì„œ 실행ëœë‹¤. ì¼ë‹¨ ê·¸ ìž‘ì—…ì´ ì™„ë£Œë˜ì—ˆë‹¤ë©´(ê·¸ë¦¬ê³ í´ë¼ì´ì–¸íŠ¸ì— 대"
"í•œ ì‘ë‹µì´ ì¤€ë¹„ë˜ì—ˆë‹¤ë©´), ê·¸ ì„¸ì…˜ì€ flush ë˜ê³ 닫혀진다. ë‹¹ì‹ ì€ ë˜í•œ ë‹¹ì‹ ì´ "
"<literal>Sessionì„ ì—´ê³ ë‹«ì„ ë•Œ ê·¸ê²ƒì„ ì‹œìž‘í•˜ê³ ì»¤ë°‹ì‹œì¼œì„œ í´ë¼ì´ì–¸"
"트 ìš”ì²ì— ì„œë¹„ìŠ¤í•˜ëŠ”ë° í•œ ê°œì˜ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì„ 사용하게 ë 것ì´ë‹¤. "
"둘 사ì´ì˜ 관계는 ì¼ëŒ€ì¼ 대ì‘ì´ê³ ì´ ëª¨í˜•ì€ ë§Žì€ ì–´í”Œë¦¬ì¼€ì´ì…˜ë“¤ì—ì„œ ì™„ì „í•˜ê²Œ "
"ì 합하다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The challenge lies in the implementation. Hibernate provides built-in "
"management of the \"current session\" to simplify this pattern. Start a "
"transaction when a server request has to be processed, and end the "
"transaction before the response is sent to the client. Common solutions are "
"<literal>ServletFilter, AOP interceptor with a pointcut on the "
"service methods, or a proxy/interception container. An EJB container is a "
"standardized way to implement cross-cutting aspects such as transaction "
"demarcation on EJB session beans, declaratively with CMT. If you use "
"programmatic transaction demarcation, for ease of use and code portability "
"use the Hibernate <literal>Transaction API shown later in this "
"chapter."
msgstr ""
"ë‚œì œëŠ” êµ¬í˜„ì— ë†“ì—¬ìžˆë‹¤: Hibernate는 ì´ íŒ¨í„´ì„ ë‹¨ìˆœí™” 시키기 위해 \"현재 세션"
"\"ì— ê´€í•œ 미리 ë¹Œë“œëœ ê´€ë¦¬ë¥¼ ì œê³µí•œë‹¤. ë‹¹ì‹ ì´ í–‰í•´ì•¼í• ëª¨ë“ ê²ƒì€ ì„œë²„ ìš”ì²ì´ "
"처리ë˜ì–´ì•¼ í• ë•Œ 트랜ìžì…˜ì„ ì‹œìž‘í•˜ê³ , ê·¸ ì‘ë‹µì´ í´ë¼ì´ì–¸íŠ¸ë¡œ ì „ì†¡ë˜ê¸° ì „ì— íŠ¸"
"ëžœìžì…˜ì„ ë내는 것ì´ë‹¤. ë‹¹ì‹ ì€ ë‹¹ì‹ ì´ ì¢‹ì•„í•˜ëŠ” ìž„ì˜ì˜ 방법으로 ì´ê²ƒì„ í–‰í• "
"수 있으며, ê³µí†µëœ í•´ê²°ì±…ë“¤ì€ ì„œë¹„ìŠ¤ 메소드들 ìƒì˜ 첨단, ë˜ëŠ” í•˜ë‚˜ì˜ í”„ë½ì‹œ/ì¸"
"터셉션 컨테ì´ë„ˆë¥¼ 가진 APO ì¸í„°ì…‰í„°ì¸, <literal>ServletFilterì´ë‹¤. "
"í•˜ë‚˜ì˜ EJB 컨테ì´ë„ˆëŠ” CMTì˜ ê²½ìš°ì— ì„ ì–¸ì 으로 EJB session beans ìƒì— 트랜ìž"
"ì…˜ 경계구분과 ê°™ì€ ë™ì‹œ 대조 ì¸¡ë©´ë“¤ì„ êµ¬í˜„í•˜ëŠ” 표준 방법ì´ë‹¤. ë§Œì¼ ë‹¹ì‹ ì´ í”„"
"로그램 ìƒì˜ 트랜ìžì…˜ ê²½ê³„êµ¬ë¶„ì„ ì‚¬ìš©í•˜ê³ ìž ê²°ì •í•œë‹¤ë©´, ì‚¬ìš©ì˜ ìš©ì´ì„±ê³¼ 코드 "
"ì´ì‹ì„±ì„ 위해 ì´ ìž¥ì˜ ë’· 부분ì—ì„œ 보여진 Hibernate <literal>Transaction. "
"You will always get a <literal>Session scoped to the current "
"database transaction. This has to be configured for either resource-local or "
"JTA environments, see <xref linkend=\"architecture-current-session\" />."
msgstr ""
"ë‹¹ì‹ ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ 코드는 ì–´ë””ì„œë“ í•„ìš”í• ë•Œ 종종 <literal>sessionFactory."
"getCurrentSession()</literal>ì„ ê°„ë‹¨ížˆ í˜¸ì¶œí•¨ìœ¼ë¡œì¨ ìš”ì²ì„ ì²˜ë¦¬í• \"현재 세션"
"\"ì— ì ‘ê·¼í• ìˆ˜ 있다. ë‹¹ì‹ ì€ í˜„ìž¬ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ìœ¼ë¡œ ì˜ì—í™”ëœ í•˜ë‚˜ì˜ "
"<literal>Sessionì„ í•ìƒ 얻게 ë 것ì´ë‹¤. ì´ê²ƒì€ resource-local 환경 "
"ë˜ëŠ” JTA í™˜ê²½ì— ëŒ€í•´ 구성ë˜ì–´ì•¼ 하며, <xref linkend=\"architecture-current-"
"session\"/>ì„ ë³´ë¼."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"You can extend the scope of a <literal>Session and database "
"transaction until the \"view has been rendered\". This is especially useful "
"in servlet applications that utilize a separate rendering phase after the "
"request has been processed. Extending the database transaction until view "
"rendering, is achieved by implementing your own interceptor. However, this "
"will be difficult if you rely on EJBs with container-managed transactions. A "
"transaction will be completed when an EJB method returns, before rendering "
"of any view can start. See the Hibernate website and forum for tips and "
"examples relating to this <emphasis>Open Session in View pattern."
msgstr ""
"때때로 \"ë·°ê°€ ë Œë”ë§ë 때까지\" í•˜ë‚˜ì˜ <literal>Session ê³¼ ë°ì´í„°ë² "
"ì´ìŠ¤ 트랜ìžì…˜ì˜ ì˜ì—ì„ í™•ìž¥ì‹œí‚¤ëŠ” ê²ƒì´ íŽ¸ë¦¬í•˜ë‹¤. ì´ê²ƒì€ ìš”ì²ì´ ì²˜ë¦¬ëœ í›„ì— í•˜"
"ë‚˜ì˜ ë³„ë„ì˜ ë Œë”ë§ ë‹¨ê³„ë¥¼ 활용하는 서블릿 어플리케ì´ì…˜ë“¤ì—ì„œ 특히 ìœ ìš©í•˜ë‹¤. "
"ë·° ë Œë”ë§ì´ 완료ë 때까지 ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì„ 확장하는 ê²ƒì€ ë‹¹ì‹ ì´ ë‹¹ì‹ "
"ìžì‹ ì˜ ì¸í„°ì…‰í„°ë¥¼ 구현하는 ê²½ìš°ì— í–‰í•˜ê¸°ê°€ 쉽다. 하지만 ë§Œì¼ ë‹¹ì‹ ì´ ì»¨í…Œì´ë„ˆ"
"ì— ì˜í•´ 관리ë˜ëŠ” 트랜ìžì…˜ë“¤ì„ 가진 EJBë“¤ì— ì˜ì¡´í• 경우ì—, í•˜ë‚˜ì˜ EJB 메소드"
"ê°€ 반환ë ë•Œ ìž„ì˜ì˜ ë·° ë Œë”ë§ì´ 시작ë 수 있기 ì „ì— í•˜ë‚˜ì˜ íŠ¸ëžœìžì…˜ì´ 완료ë˜"
"기 때문ì—, 행하는 ê²ƒì´ ì‰½ì§€ 않다. ì´ <emphasis>Open Session in View and database transaction. "
"The user is free to modify the objects."
msgstr ""
"대화ìƒìžì˜ 첫 번째 í™”ë©´ì´ ì—´ë¦¬ê³ , 사용ìžì—게 보여진 ë°ì´í„°ëŠ” íŠ¹ì • "
"<literal>Sessionê³¼ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ ì†ì— 로드ë˜ì—ˆë‹¤. 사용ìžê°€ "
"ê°ì²´ë“¤ì„ 변경시키는 ê²ƒì´ ìžìœ ë¡ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The user clicks \"Save\" after 5 minutes and expects their modifications to "
"be made persistent. The user also expects that they were the only person "
"editing this information and that no conflicting modification has occurred."
msgstr ""
"사용ìžëŠ” 5분 í›„ì— \"ì €ìž¥\"ì„ í´ë¦í•˜ê³ ê·¸ì˜ ë³€ê²½ë“¤ì´ ì˜ì†í™” ë˜ê¸°ë¥¼ 기대한다; "
"그는 ë˜í•œ 그가 ì´ ì •ë³´ë¥¼ 편집하는 ìœ ì¼í•œ ê°œì¸ì´ê³ 변경 충ëŒì´ ë°œìƒí•˜ì§€ 않기"
"를 기대한다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"From the point of view of the user, we call this unit of work a long-running "
"<emphasis>conversation or application transaction어플리케ì´ì…˜ 트랜ìžì…˜)ì´ë¼ê³ 명명한다. "
"ë‹¹ì‹ ì´ ë‹¹ì‹ ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ì—ì„œ ì´ê²ƒì„ 어떻게 êµ¬í˜„í• ìˆ˜ 있는 ë§Žì€ ë°©ë²•ë“¤ì´ ì¡´"
"재한다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"A first naive implementation might keep the <literal>Session and "
"database transaction open during user think time, with locks held in the "
"database to prevent concurrent modification and to guarantee isolation and "
"atomicity. This is an anti-pattern, since lock contention would not allow "
"the application to scale with the number of concurrent users."
msgstr ""
"첫 번째 naive êµ¬í˜„ì€ ë™ì‹œì„± ë³€ê²½ì„ ë°©ì§€í•˜ê³ , 격리와 atomicity(ì›ìž 단위성)ì„ "
"보장하기 위해 ë°ì´í„°ë² ì´ìŠ¤ì— ì˜í•´ ì†Œìœ ëœ ìž ê¸ˆìœ¼ë¡œ 사용ìžê°€ ìƒê°í•˜ëŠ”ë™ì•ˆ "
"<literal>Sessionê³¼ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì„ ìœ ì§€í• ìˆ˜ë„ ìžˆë‹¤. ì´ê²ƒ"
"ì€ ë¬¼ë¡ anti-패턴ì´ë‹¤. 왜ëƒí•˜ë©´ ìž ê¸ˆ ë‹¤íˆ¼ì€ ì–´í”Œë¦¬ì¼€ì´ì…˜ì´ ë™ì‹œ 사용ìžë“¤ì˜ ê°€"
"ìš© 숫ìžë¥¼ 높ì´ëŠ” ê²ƒì„ í—ˆìš©í•˜ì§€ ì•Šì„ ê²ƒì´ê¸° 때문ì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"You have to use several database transactions to implement the conversation. "
"In this case, maintaining isolation of business processes becomes the "
"partial responsibility of the application tier. A single conversation "
"usually spans several database transactions. It will be atomic if only one "
"of these database transactions (the last one) stores the updated data. All "
"others simply read data (for example, in a wizard-style dialog spanning "
"several request/response cycles). This is easier to implement than it might "
"sound, especially if you utilize some of Hibernate's features:"
msgstr ""
"명료하게, 우리는 대화(<emphasis>어플리케ì´ì…˜ 트랜ìžì…˜)를 구현하는"
"ë° ëª‡ëª‡ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ë“¤ì„ 사용해야 한다. ì´ ê²½ìš°ì—, 비지니스 프로세스"
"ë“¤ì˜ ê²©ë¦¬ë¥¼ ìœ ì§€í•˜ëŠ” ê²ƒì€ ì–´í”Œë¦¬ì¼€ì´ì…˜ í‹°ì–´ì˜ ë¶€ë¶„ì ì¸ ì±…ìž„ì´ ëœë‹¤. ë‹¨ì¼ ëŒ€í™”"
"는 대개 여러 ê°œì˜ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ë“¤ì— 걸친다. ê·¸ê²ƒì€ ì´ë“¤ ë°ì´í„°ë² ì´ìŠ¤ "
"트랜ìžì…˜ë“¤ 중 ì˜¤ì§ í•œ ê°œ(마지막 트랜ìžì…˜)ê°€ ì—…ë°ì´íŠ¸ëœ ë°ì´í„°ë¥¼ ì €ìž¥í•˜ê³ , 모"
"ë“ ë‹¤ë¥¸ 트랜ìžì…˜ë“¤ì´ 단순히 ë°ì´í„°ë¥¼ ì½ëŠ” (예를 들면, 몇몇 ìš”ì²/ì‘답 ì£¼ê¸°ì— "
"걸치는 마법사 스타ì¼ì˜ 대화 ìƒìžì—ì„œ) 경우ì—만 ì›ìžë‹¨ìœ„ê°€ ë 것ì´ë‹¤. 특히 당"
"ì‹ ì´ Hibernateì˜ íŠ¹ì§•ë“¤ì„ ì‚¬ìš©í• ê²½ìš°ì— , ì´ê²ƒì€ 들리는 것보다 구현하기가 ë” "
"쉽다:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<emphasis>Automatic Versioning: Hibernate can perform automatic "
"optimistic concurrency control for you. It can automatically detect if a "
"concurrent modification occurred during user think time. Check for this at "
"the end of the conversation."
msgstr ""
"<emphasis>ìžë™ì ì¸ ë²„ì „í™” - Hibernate는 ë‹¹ì‹ ì„ ìœ„í•´ ìžë™ì ì¸ "
"optimistic ë™ì‹œì„± ì œì–´ë¥¼ í–‰í• ìˆ˜ ìžˆê³ , ê·¸ê²ƒì€ ì‚¬ìš©ìžê°€ ìƒê°í•˜ëŠ” 시간 ë™ì•ˆ ë™"
"ì‹œì ì¸ ë³€ê²½ì´ ë°œìƒí–ˆëŠ”지를 ìžë™ì 으로 ê²€ì¶œí• ìˆ˜ 있다. 대개 우리는 ì˜¤ì§ ëŒ€í™”"
"ì˜ ëì—ì„œ ì²´í¬í•œë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<emphasis>Detached Objects: if you decide to use the "
"<emphasis>session-per-request pattern, all loaded instances will "
"be in the detached state during user think time. Hibernate allows you to "
"reattach the objects and persist the modifications. The pattern is called "
"<emphasis>session-per-request-with-detached-objects. Automatic "
"versioning is used to isolate concurrent modifications."
msgstr ""
"<emphasis>Detached ê°ì²´ë“¤ - ë§Œì¼ ë‹¹ì‹ ì´ ì´ë¯¸ ë…¼ì˜ëœ "
"<emphasis>session-per-request íŒ¨í„´ì„ ì‚¬ìš©í•˜ê³ ìž ê²°ì •í•˜ëŠ” 경우, 모"
"ë“ ë¡œë“œëœ ì¸ìŠ¤í„´ìŠ¤ë“¤ì€ 사용ìžê°€ ìƒê°í•˜ëŠ” 시간 ë™ì•ˆ detached ìƒíƒœì— ìžˆì„ ê²ƒì´"
"다. Hibernate는 ê·¸ ê°ì²´ë“¤ì„ ìž¬ì²¨ë¶€ì‹œí‚¤ê³ ë³€ê²½ë“¤ì„ ì˜ì†í™” 시키는 ê²ƒì„ í—ˆìš©í•´ì£¼"
"ë©°, ê·¸ íŒ¨í„´ì€ <emphasis>session-per-request-with-detached-objects(detached-ê°"
"ì²´ë“¤ì„ ê°€ì§„ ìš”ì² ë‹¹ 세션)</emphasis>으로 명명ëœë‹¤. ìžë™ì ì¸ ë²„ì „í™”ëŠ” ë™ì‹œì„± "
"ë³€ê²½ë“¤ì„ ê²©ë¦¬ì‹œí‚¤ëŠ”ë° ì‚¬ìš©ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<emphasis>Extended (or Long) Session: the Hibernate "
"<literal>Session can be disconnected from the underlying JDBC "
"connection after the database transaction has been committed and reconnected "
"when a new client request occurs. This pattern is known as <emphasis>session-"
"per-conversation</emphasis> and makes even reattachment unnecessary. "
"Automatic versioning is used to isolate concurrent modifications and the "
"<literal>Session will not be allowed to be flushed automatically, "
"but explicitly."
msgstr ""
"<emphasis>í™•ìž¥ëœ (ë˜ëŠ” Long) Session - Hibernate "
"<emphasis>Sessionì€ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì´ ì»¤ë°‹ëœ í›„ì— ê¸°ë³¸ JDBC "
"ì»¤ë„¥ì…˜ì´ ì—°ê²° í•´ì œë ìˆ˜ë„ ìžˆê³ , 새로운 í´ë¼ì´ì–¸íŠ¸ ìš”ì²ì´ ë°œìƒí• ë•Œ 다시 ì—°ê²°"
"ë 수 있다. ì´ íŒ¨í„´ì€ <emphasis>session-per-conversation(대화 당 세션)ì€ ìžë™ì 으로 "
"flushë˜ëŠ” ê²ƒì´ í—ˆìš©ë˜ì§€ 않지만 명시ì 으로 flushë˜ëŠ” ê²ƒì€ í—ˆìš©ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Both <emphasis>session-per-request-with-detached-objects and "
"<emphasis>session-per-conversation have advantages and "
"disadvantages. These disadvantages are discussed later in this chapter in "
"the context of optimistic concurrency control."
msgstr ""
"<emphasis>session-per-request-with-detached-objectsê³¼ "
"<emphasis>session-per-conversation ì–‘ìžëŠ” 장ì 들과 단ì ë“¤ì„ ê°–ëŠ”"
"ë°, 우리는 ì´ ìž¥ì˜ ë’· 부분ì—ì„œ optimistic ë™ì‹œì„± ì œì–´ 단ë½ì—ì„œ ê·¸ê²ƒë“¤ì„ ë…¼ì˜"
"한다."
#. Tag: title
#, no-c-format
msgid "Considering object identity"
msgstr "ê°ì²´ identity ê³ ë ¤í•˜ê¸°"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"An application can concurrently access the same persistent state in two "
"different <literal>Sessions. However, an instance of a persistent "
"class is never shared between two <literal>Session instances. It "
"is for this reason that there are two different notions of identity:"
msgstr ""
"어플리케ì´ì…˜ì€ ë‘ ê°œì˜ ë‹¤ë¥¸ <literal>Session들 ë‚´ì— ìžˆëŠ” ë™ì¼í•œ ì˜"
"ì† ìƒíƒœì— ë™ì‹œì— ì ‘ê·¼í• ìˆ˜ë„ ìžˆë‹¤. 하지만 ì˜ì† í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ëŠ” ë‘ ê°œì˜ "
"<literal>Session ì¸ìŠ¤í„´ìŠ¤ë“¤ 사ì´ì— ê²°ì½” ê³µìœ ë˜ì§€ 않는다. 그러므로 "
"identityì— ëŒ€í•œ ë‘ ê°œì˜ ë‹¤ë¥¸ ê°œë…ë“¤ì´ ì¡´ìž¬í•œë‹¤:"
#. Tag: term
#, no-c-format
msgid "Database Identity"
msgstr "ë°ì´í„°ë² ì´ìŠ¤ Identity"
#. Tag: para
#, fuzzy, no-c-format
msgid "<literal>foo.getId().equals( bar.getId() )"
msgstr "foo.getId().equals( bar.getId() )"
#. Tag: term
#, no-c-format
msgid "JVM Identity"
msgstr "JVM Identity"
#. Tag: para
#, no-c-format
msgid "<literal>foo==bar"
msgstr ""
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"For objects attached to a <emphasis>particular SessionSession), the two "
"notions are equivalent and JVM identity for database identity is guaranteed "
"by Hibernate. While the application might concurrently access the \"same"
"\" (persistent identity) business object in two different sessions, the two "
"instances will actually be \"different\" (JVM identity). Conflicts are "
"resolved using an optimistic approach and automatic versioning at flush/"
"commit time."
msgstr ""
"그때 (예를 들어 <literal>Session ì˜ì—ì—ì„œ) íŠ¹ì •Sessionì— ì²¨ë¶€ëœ ê°ì²´ë“¤ì˜ 경우 ë‘ ê°œì˜ ê°œë…ë“¤ì€ "
"ë™ë“±í•œ 것ì´ê³ , ë°ì´í„°ë² ì´ìŠ¤ identityì— ëŒ€í•œ JVM identityê°€ Hibernateì— ì˜í•´ "
"보장ëœë‹¤. 하지만, 어플리케ì´ì…˜ì´ ë‘ ê°œì˜ ë‹¤ë¥¸ 세션들ì—ì„œ \"ë™ì¼í•œ\" (ì˜ì† "
"identity) 비지니스 ê°ì²´ì— ë™ì‹œì— ì ‘ê·¼í•˜ëŠ” ë™ì•ˆ, ë‘ ê°œì˜ ì¸ìŠ¤í„´ìŠ¤ë“¤ì€ ì‹¤ì œë¡œ "
"\"다르다\"(JVM identity). 충ëŒë“¤ì€ flush/커밋 ì‹œì— (ìžë™ì ì¸ ë²„ì „í™”)를 사용하"
"ì—¬, optimistic ì ‘ê·¼ë²•ì„ ì‚¬ìš©í•˜ì—¬ í•´ê²°ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"This approach leaves Hibernate and the database to worry about concurrency. "
"It also provides the best scalability, since guaranteeing identity in single-"
"threaded units of work means that it does not need expensive locking or "
"other means of synchronization. The application does not need to synchronize "
"on any business object, as long as it maintains a single thread per "
"<literal>Session. Within a Session the "
"application can safely use <literal>== to compare objects."
msgstr ""
"ì´ ì ‘ê·¼ë²•ì€ Hibernate와 ë°ì´í„°ë² ì´ìŠ¤ê°€ ë™ì‹œì„±ì— 대해 ê±±ì •í•˜ì§€ ì•Šë„ë¡ í•´ì¤€ë‹¤; "
"ê·¸ê²ƒì€ ë˜í•œ 최ìƒì˜ scalability를 ì œê³µí•œë‹¤. 왜ëƒí•˜ë©´ ë‹¨ì¼ ì“°ë ˆë“œ-ìž‘ì—… 단위 ë‚´"
"ì—ì„œ identity ë³´ìž¥ì€ ë‹¨ì§€ ë¹„ìš©ì´ ë“œëŠ” ìž ê¸ˆì´ë‚˜ 다른 ë™ê¸°í™” ìˆ˜ë‹¨ë“¤ì„ í•„ìš”ë¡œ 하"
"지 않기 때문ì´ë‹¤. 어플리케ì´ì…˜ì€ ê·¸ê²ƒì´ <literal>Session 당 ë‹¨ì¼ ì“°"
"ë ˆë“œë¥¼ ê°•ì œí•˜ëŠ” í•œ, ì–´ë–¤ 비지니스 ê°ì²´ì— 대해 ê²°ì½” ë™ê¸°í™” 시킬 필요가 없다. "
"í•˜ë‚˜ì˜ <literal>Session ë‚´ì—ì„œ 어플리케ì´ì…˜ì€ ê°ì²´ë“¤ì„ 비êµí•˜ëŠ”ë° "
"<literal>==를 ì•ˆì „í•˜ê²Œ ì‚¬ìš©í• ìˆ˜ê°€ 있다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"However, an application that uses <literal>== outside of a "
"<literal>Session might produce unexpected results. This might "
"occur even in some unexpected places. For example, if you put two detached "
"instances into the same <literal>Set, both might have the same "
"database identity (i.e., they represent the same row). JVM identity, "
"however, is by definition not guaranteed for instances in a detached state. "
"The developer has to override the <literal>equals() and "
"<literal>hashCode() methods in persistent classes and implement "
"their own notion of object equality. There is one caveat: never use the "
"database identifier to implement equality. Use a business key that is a "
"combination of unique, usually immutable, attributes. The database "
"identifier will change if a transient object is made persistent. If the "
"transient instance (usually together with detached instances) is held in a "
"<literal>Set, changing the hashcode breaks the contract of the "
"<literal>Set. Attributes for business keys do not have to be as "
"stable as database primary keys; you only have to guarantee stability as "
"long as the objects are in the same <literal>Set. See the "
"Hibernate website for a more thorough discussion of this issue. Please note "
"that this is not a Hibernate issue, but simply how Java object identity and "
"equality has to be implemented."
msgstr ""
"하지만, í•˜ë‚˜ì˜ <literal>Session 외부ì—ì„œ ==를 사"
"용하는 어플리케ì´ì…˜ì€ 예기치 ì•Šì€ ê²°ê³¼ë“¤ì„ ë³´ê²Œ ë ìˆ˜ë„ ìžˆë‹¤. ì´ê²ƒì€ ì–´ë–¤ 예"
"기치 ì•Šì€ ìž¥ì†Œë“¤ì—ì„œ, 예를 들어 ë‹¹ì‹ ì´ ë‘ ê°œì˜ detached ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ ë™ì¼í•œ "
"<literal>Set ë‚´ì— ì§‘ì–´ë„£ì„ ê²½ìš°ì— ë°œìƒí• ìˆ˜ë„ ìžˆë‹¤. 둘 다 ë™ì¼í•œ ë°"
"ì´í„°ë² ì´ìŠ¤ identity를 가질 수 있지만 (예를 들어 ê·¸ê²ƒë“¤ì€ ë™ì¼í•œ í–‰ì„ í‘œí˜„í•œ"
"다), JVM identity는 ì •ì˜ ìƒ detached ìƒíƒœì— 있는 ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 보장하지 않는"
"다. 개발ìžëŠ” ì˜ì† í´ëž˜ìŠ¤ë“¤ë‚´ì— <literal>equals() 메소드와 "
"<literal>hashCode() 메소드를 오버ë¼ì´ë“œ 시켜야 í•˜ê³ ê°ì²´ equality"
"ì— ëŒ€í•œ ê·¸ ìžì‹ ì˜ ê°œë…ì„ êµ¬í˜„í•´ì•¼ 한다. í•˜ë‚˜ì˜ ê²½ê³ ê°€ 존재한다: equality를 구"
"í˜„í•˜ëŠ”ë° ë°ì´í„°ë² ì´ìŠ¤ identifier를 ê²°ì½” 사용하지 ë§ê³ , í•˜ë‚˜ì˜ ë¹„ì§€ë‹ˆìŠ¤ 키, ìœ "
"ì¼í•œ, 대개 ë¶ˆë³€ì¸ ì†ì„±ë“¤ì˜ ì¡°í•©ì„ ì‚¬ìš©í•˜ë¼. ë°ì´í„°ë² ì´ìŠ¤ ì‹ë³„ìžëŠ” ë§Œì¼ "
"transient ê°ì²´ê°€ ì˜ì†í™”ë˜ëŠ” ê²½ìš°ì— ë³€ê²½ë 것ì´ë‹¤. ë§Œì¼ transient ì¸ìŠ¤í„´ìŠ¤ê°€"
"(대개 detached ì¸ìŠ¤í„´ìŠ¤ë“¤ê³¼ 함께) <literal>Set ë‚´ì— ë³´ê´€ë˜ëŠ” 경우"
"ì—, hashcode ë³€ê²½ì€ <literal>Setì˜ ê³„ì•½ì„ íŒŒê¸°ì‹œí‚¨ë‹¤. 비지니스 키들"
"ì— ëŒ€í•œ ì†ì„±ë“¤ì€ ë°ì´í„°ë² ì´ìŠ¤ 프ë¼ì´ë¨¸ë¦¬ 키들 ë§Œí¼ ì•ˆì •ì ì´ì–´ì„œëŠ” 안ë˜ë©°, 당"
"ì‹ ì€ ì˜¤ì§ ê°ì²´ë“¤ì´ ë™ì¼í•œ <literal>Set ë‚´ì— ìžˆëŠ” í•œì—ì„œ ì•ˆì •ì„±ì„ ë³´"
"장해야만 한다. ì´ ìŸì ì— ê´€í•œ ë…¼ì˜ì— 대한 ë” ë§Žì€ ê²ƒì„ Hibernate 웹 사ì´íŠ¸ë¥¼ "
"ë³´ë¼. ë˜í•œ ì´ê²ƒì´ Hibernate ìŸì ì´ ì•„ë‹ˆë©°, 단지 ìžë°” ê°ì²´ identity와 equality"
"ê°€ 구현ë˜ì–´ì•¼ 하는 ë°©ë²•ìž„ì„ ë…¸íŠ¸í•˜ë¼."
#. Tag: title
#, no-c-format
msgid "Common issues"
msgstr "ê³µí†µëœ ìŸì 들"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Do not use the anti-patterns <emphasis>session-per-user-session "
"or <emphasis>session-per-application (there are, however, rare "
"exceptions to this rule). Some of the following issues might also arise "
"within the recommended patterns, so ensure that you understand the "
"implications before making a design decision:"
msgstr ""
"안티-패턴들 <emphasis>session-per-user-session ë˜ëŠ” "
"<emphasis>session-per-applicationì„ ê²°ì½” 사용하지 ë§ë¼(ë¬¼ë¡ ì´ ê·œ"
"ì¹™ì— ëŒ€í•œ 드문 예외ìƒí™©ë“¤ì´ 존재한다). ë‹¤ìŒ ìŸì 들 중 ëª‡ëª‡ì´ ë˜í•œ 권장ë˜ëŠ” 패"
"턴들로 ë‚˜íƒ€ë‚ ìˆ˜ 있ìŒì„ ë…¸íŠ¸í•˜ê³ , ë‹¹ì‹ ì´ ì„¤ê³„ ê²°ì •ì„ ë‚´ë¦¬ê¸° ì „ì— ë‚´í¬ëœ ì˜ë¯¸"
"ë“¤ì„ í™•ì‹¤ížˆ ì´í•´í•˜ë¼:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"A <literal>Session is not thread-safe. Things that work "
"concurrently, like HTTP requests, session beans, or Swing workers, will "
"cause race conditions if a <literal>Session instance is shared. If "
"you keep your Hibernate <literal>Session in your "
"<literal>HttpSession (this is discussed later in the chapter), you "
"should consider synchronizing access to your Http session. Otherwise, a user "
"that clicks reload fast enough can use the same <literal>Session "
"in two concurrently running threads."
msgstr ""
"<literal>Sessionì€ ì“°ë ˆë“œ-ì•ˆì „í•˜ì§€ 않다. HTTP ìš”ì²ë“¤, 세션 빈즈, ë˜"
"는 Swing worker들처럼 ë™ì‹œì— 작업하는 것으로 ê°€ì •ë˜ëŠ” ê²ƒë“¤ì€ í•˜ë‚˜ì˜ "
"<literal>Session ì¸ìŠ¤í„´ìŠ¤ê°€ ê³µìœ ë ê²½ìš°ì— ê²½ìŸ ì¡°ê±´ë“¤ì„ ë°œìƒì‹œí‚¬ 것"
"ì´ë‹¤. ë§Œì¼ ë‹¹ì‹ ì´ ë‹¹ì‹ ì˜ <literal>HttpSession ë‚´ì— Hibernate "
"<literal>Sessionì„ ìœ ì§€ì‹œí‚¤ëŠ” 경우(ë‚˜ì¤‘ì— ë…¼ì˜ë¨), ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ "
"Http ì„¸ì…˜ì— ëŒ€í•œ ì ‘ê·¼ì„ ë™ê¸°í™” 시키는 ê²ƒì„ ê³ ë ¤í•´ì•¼ 한다. ê·¸ ë°–ì˜ ê²½ìš°, 충분"
"히 ë¹ ë¥´ê²Œ reload를 í´ë¦í•˜ëŠ” 사용ìžëŠ” ë‘ ê°œì˜ ë™ì‹œì 으로 실행ë˜ëŠ” ì“°ë ˆë“œë“¤ ë‚´"
"ì—ì„œ ë™ì¼í•œ <literal>Sessionì„ ì‚¬ìš©í• ìˆ˜ë„ ìžˆë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"An exception thrown by Hibernate means you have to rollback your database "
"transaction and close the <literal>Session immediately (this is "
"discussed in more detail later in the chapter). If your <literal>Sessionì„ ë‹«ì•„ì•¼ í•¨ì„ ì˜ë¯¸í•œë‹¤(ë‚˜ì¤‘ì— ìƒì„¸"
"히 ë…¼ì˜ë¨). ë§Œì¼ ë‹¹ì‹ ì˜ <literal>Sessionì´ ì–´í”Œë¦¬ì¼€ì´ì…˜ì— ë°”ì¸ë“œ ë˜"
"ì–´ 있는 경우, ë‹¹ì‹ ì€ ì–´í”Œë¦¬ì¼€ì´ì…˜ì„ 중지시켜야 한다. ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ 롤"
"ë°±ì€ ë‹¹ì‹ ì˜ ë¹„ì§€ë‹ˆìŠ¤ ê°ì²´ë“¤ì„ ê·¸ê²ƒë“¤ì´ íŠ¸ëžœìžì…˜ì˜ 시작 ì‹œì— ë¨¸ë¬¼ë €ë˜ ìƒíƒœë¡œ "
"ë˜ëŒë¦¬ì§€ëŠ” 않는다. ì´ê²ƒì€ ë°ì´í„°ë² ì´ìŠ¤ ìƒíƒœì™€ 비지니스 ê°ì²´ë“¤ì´ ë™ê¸°í™”를 ë²—ì–´"
"ë‚¨ì„ ì˜ë¯¸í•œë‹¤. 대개 ì´ê²ƒì€ ë¬¸ì œê°€ 아니다. 왜ëƒí•˜ë©´ 예외ìƒí™©ë“¤ì€ 회복가능한 것"
"ì´ ì•„ë‹ˆê³ ë‹¹ì‹ ì´ ì–´ë–»ê²Œë“ ë¡¤ë°± í›„ì— ì‹œìž‘í•´ì•¼ 하기 때문ì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The <literal>Session caches every object that is in a persistent "
"state (watched and checked for dirty state by Hibernate). If you keep it "
"open for a long time or simply load too much data, it will grow endlessly "
"until you get an OutOfMemoryException. One solution is to call <literal>clear"
"()</literal> and evict() to manage the Session open for the duration of a user session "
"also means a higher probability of stale data."
msgstr ""
"<literal>Sessionì€ (Hibernateì— ì˜í•´ dirty ìƒíƒœë¡œ 관찰ë˜ì—ˆê±°ë‚˜ ì²´í¬"
"ëœ) ì˜ì† ìƒíƒœì— 있는 ëª¨ë“ ê°ì²´ë¥¼ ìºì‹œ 시킨다. ì´ê²ƒì€ ë‹¹ì‹ ì´ ì˜¤ëžœ 시간 ë™ì•ˆ "
"<literal>Sessionì„ ì—´ì–´ë‘” 채로 ìœ ì§€í•˜ê±°ë‚˜ 단순하게 너무 ë§Žì€ ë°ì´í„°"
"를 로드시킬 경우ì—, ë‹¹ì‹ ì´ OutOfMemoryExceptionì„ ì–»ê¸° ì „ê¹Œì§€, ê·¸ê²ƒì´ ëì—†ì´ "
"성장한다는 ì ì„ ì˜ë¯¸í•œë‹¤. ì´ê²ƒì— 대한 í•˜ë‚˜ì˜ í•´ê²°ì±…ì€ <literal>Sessionclear()와 evict()ì„ ì—´ë ¤ì§„ 채로 ìœ ì§€í•˜ëŠ” ê²ƒì€ ë˜í•œ ì‹¤íš¨ì„±ì´ ë–¨ì–´ì§„ "
"ë°ì´í„°ì— 대한 ë†’ì€ í™•ë¥ ì„ ì˜ë¯¸í•œë‹¤."
#. Tag: title
#, no-c-format
msgid "Database transaction demarcation"
msgstr "ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ 경계 ì„¤ì •"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Database, or system, transaction boundaries are always necessary. No "
"communication with the database can occur outside of a database transaction "
"(this seems to confuse many developers who are used to the auto-commit "
"mode). Always use clear transaction boundaries, even for read-only "
"operations. Depending on your isolation level and database capabilities this "
"might not be required, but there is no downside if you always demarcate "
"transactions explicitly. Certainly, a single database transaction is going "
"to perform better than many small transactions, even for reading data."
msgstr ""
"ë°ì´í„°ë² ì´ìŠ¤ (ë˜ëŠ” 시스템) 트랜ìžì…˜ ê²½ê³„ë“¤ì€ í•ìƒ 필수ì ì´ë‹¤. ë°ì´í„°ë² ì´ìŠ¤ì™€"
"ì˜ í†µì‹ ì€ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì˜ 외부ì—ì„œ ë°œìƒí• 수 없다(ì´ê²ƒì€ ìžë™-커밋 모"
"드로 사용ë˜ëŠ” ë§Žì€ ê°œë°œìžë“¤ì—게는 혼ë™ìŠ¤ëŸ¬ì›Œ ë³´ì¸ë‹¤). í•ìƒ 심지어 ì½ê¸° ì „ìš© "
"오í¼ë ˆì´ì…˜ë“¤ì— ëŒ€í•´ì„œë„ ëª…ë£Œí•œ 트랜ìžì…˜ ê²½ê³„ë“¤ì„ ì‚¬ìš©í•˜ë¼. ë‹¹ì‹ ì˜ ê²©ë¦¬ ë ˆë²¨"
"ê³¼ ë°ì´í„°ë² ì´ìŠ¤ ê°€ìš©ì„±ë“¤ì— ë”°ë¼, ì´ê²ƒì€ 필요하지 ì•Šì„ ìˆ˜ 있지만, ë§Œì¼ ë‹¹ì‹ ì´ "
"í•ìƒ 트랜ìžì…˜ë“¤ì„ 명시ì 으로 경계 ì„¤ì •í• ê²½ìš°ì—는 하강하는 ê²°ì ë“¤ì´ ì¡´ìž¬í•˜ì§€ "
"않는다. 확실히, í•˜ë‚˜ì˜ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì€ 심지어 ë°ì´í„° ì½ê¸°ì¡°ì°¨ë„ ë§Žì€ "
"ìž‘ì€ íŠ¸ëžœìžì…˜ë“¤ì˜ 경우보다는 ë” ì¢‹ê²Œ 수행ë 것ì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"A Hibernate application can run in non-managed (i.e., standalone, simple "
"Web- or Swing applications) and managed J2EE environments. In a non-managed "
"environment, Hibernate is usually responsible for its own database "
"connection pool. The application developer has to manually set transaction "
"boundaries (begin, commit, or rollback database transactions) themselves. A "
"managed environment usually provides container-managed transactions (CMT), "
"with the transaction assembly defined declaratively (in deployment "
"descriptors of EJB session beans, for example). Programmatic transaction "
"demarcation is then no longer necessary."
msgstr ""
"Hibernate 어플리케ì´ì…˜ì€ 관리ë˜ì§€ 않는 환경(예를 들면. ìŠ¤íƒ ë“œì–¼ë¡ , 간단히 웹 "
"어플리케ì´ì…˜ë“¤ ë˜ëŠ” Swing 어플리케ì´ì…˜ë“¤)ê³¼ 관리ë˜ëŠ” J2EE 환경ì—ì„œ 실행ë 수 "
"있다. 관리ë˜ì§€ 않는 환경ì—ì„œ, Hibernate는 대개 그것 ìžì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ 커넥"
"ì…˜ í’€ì— ëŒ€í•œ ì±…ìž„ì´ ìžˆë‹¤. 어플리케ì´ì…˜ 개발ìžëŠ” 트랜ìžì…˜ ê²½ê³„ë“¤ì„ ì†ìˆ˜ ì„¤ì •í•´"
"야 한다. 달리 ë§í•´, ê°œë°œìž ìŠ¤ìŠ¤ë¡œ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ë“¤ì„ ì‹œìž‘í•˜ê³ , 커밋시"
"키거나 롤백시켜야 한다. 관리ë˜ëŠ” í™˜ê²½ì€ ëŒ€ê°œ 예를 들어 EJB 세션 ë¹ˆì¦ˆì˜ ë°°ì¹˜ "
"디스í¬ë¦½í„° ì†ì— ì„ ì–¸ì 으로 ì •ì˜ëœ 트랜ìžì…˜ 어셈블리를 가진, 컨테ì´ë„ˆì— ì˜í•´-"
"관리ë˜ëŠ” 트랜ìžì…˜ë“¤(CMT)ì„ ì œê³µí•œë‹¤. 그때 프로그램 ìƒì˜ 트랜ìžì…˜ 경계 ì„¤ì •ì€ "
"ë” ì´ìƒ 필요하지 않다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"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 use programmatic "
"transaction demarcation. Hibernate offers a wrapper API called "
"<literal>Transaction that translates into the native transaction "
"system of your deployment environment. This API is actually optional, but we "
"strongly encourage its use unless you are in a CMT session bean."
msgstr ""
"하지만, CMT ëŒ€ì‹ BMT를 사용하는 JTAì— ì˜ì¡´í• 수 있는 시스템들, ê·¸ë¦¬ê³ ê´€ë¦¬ë˜"
"지 않는 resource-local 환경들 사ì´ì—ì„œ ë‹¹ì‹ ì˜ ì˜ì† ê³„ì¸µì— ì´ì‹ì„±ì„ ìœ ì§€ì‹œí‚¤"
"는 ê²ƒì´ ìžì£¼ í¬ë§ëœë‹¤. ë‘ ê²½ìš°ë“¤ì—ì„œ ë‹¹ì‹ ì€ í”„ë¡œê·¸ëž¨ ìƒì˜ 트랜ìžì…˜ ê²½ê³„ì„¤ì •"
"ì„ ì‚¬ìš©í• ê²ƒì´ë‹¤. Hibernate는 ë‹¹ì‹ ì˜ ë°°ì¹˜ í™˜ê²½ì˜ ê³ ìœ í•œ 트랜ìžì…˜ 시스템 ì†ìœ¼"
"ë¡œ 변환ë˜ëŠ” <literal>Transactionì´ë¼ 명명ë˜ëŠ” wrapper API 를 ì œê³µí•œ"
"다. ì´ API는 ì‹¤ì œë¡œ 옵션ì´ì§€ë§Œ 우리는 ë‹¹ì‹ ì´ CMT session bean ì†ì— 있지 않는 "
"í•œ ê·¸ê²ƒì˜ ì‚¬ìš©ì„ ê°•ë ¥í•˜ê²Œ 권장한다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Ending a <literal>Session usually involves four distinct phases:"
msgstr ""
"대개 <literal>Session 종료는 네 ê°œì˜ êµ¬ë¶„ë˜ëŠ” ë‹¨ê³„ë“¤ì„ ìˆ˜ë°˜í•œë‹¤:"
#. Tag: para
#, no-c-format
msgid "flush the session"
msgstr "ì„¸ì…˜ì„ flush 시킨다"
#. Tag: para
#, no-c-format
msgid "commit the transaction"
msgstr "트랜ìžì…˜ì„ 커밋 시킨다"
#. Tag: para
#, no-c-format
msgid "close the session"
msgstr "ì„¸ì…˜ì„ ë‹«ëŠ”ë‹¤"
#. Tag: para
#, no-c-format
msgid "handle exceptions"
msgstr "예외ìƒí™©ë“¤ì„ 처리한다"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"We discussed Flushing the session earlier, so we will now have a closer look "
"at transaction demarcation and exception handling in both managed and non-"
"managed environments."
msgstr ""
"ì„¸ì…˜ì„ flush 시키는 ê²ƒì€ ì•žì„œ ë…¼ì˜ë˜ì—ˆê³ , 우리는 ì´ì œ 관리ë˜ëŠ” 환경과 관리ë˜"
"지 않는 환경 ì–‘ìžì—ì„œ 트랜ìžì…˜ 경계 ì„¤ì •ê³¼ 예외ìƒí™©ì„ ë” ìžì„¸ížˆ 살펴볼 것ì´"
"다."
#. Tag: title
#, no-c-format
msgid "Non-managed environment"
msgstr "관리ë˜ì§€ 않는 환경"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"If a Hibernate persistence layer runs in a non-managed environment, database "
"connections are usually handled by simple (i.e., non-DataSource) connection "
"pools from which Hibernate obtains connections as needed. The session/"
"transaction handling idiom looks like this:"
msgstr ""
"ë§Œì¼ Hibernate ì˜ì† ê³„ì¸µì´ ê´€ë¦¬ë˜ì§€ 않는(non-managed) 환경ì—ì„œ 실행ë 경우, "
"ë°ì´í„°ë² ì´ìŠ¤ ì»¤ë„¥ì…˜ë“¤ì€ ëŒ€ê°œ Hibernateê°€ í•„ìš”ë¡œí• ë•Œ ì»¤ë„¥ì…˜ë“¤ì„ íšë“하는 간단"
"í•œ (예를 들면 DataSourceê°€ ì•„ë‹Œ) 커넥션 í’€(pool)들로부터 처리ëœë‹¤. session/"
"transaction 처리 관용구는 다ìŒê³¼ 같다:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"You do not have to <literal>flush() the Session "
"explicitly: the call to <literal>commit() automatically triggers "
"the synchronization depending on the <link linkend=\"objectstate-flushing"
"\">FlushMode</link> for the session. A call to close() "
"marks the end of a session. The main implication of <literal>close()ì„ ëª…ì‹œì 으로 flush() 하"
"지 ë§ì•„야 한다 - <literal>commit()ì— ëŒ€í•œ í˜¸ì¶œì€ (ê·¸ ì„¸ì…˜ì— ëŒ€í•œ "
"<xref linkend=\"objectstate-flushing\">FlushModeì— ë”°ë¼)ìžë™ì 으로 ë™"
"기화를 트리거시킨다. <literal>close()ì— ëŒ€í•œ í˜¸ì¶œì€ ì„¸ì…˜ì˜ ëì„ ë§ˆ"
"í¬í•œë‹¤. <literal>close()ì˜ ì£¼ëœ êµ¬í˜„ì€ JDBC ì»¤ë„¥ì…˜ì´ ê·¸ ì„¸ì…˜ì— ì˜"
"í•´ í¬ê¸°ë 것ì´ë¼ëŠ” ì ì´ë‹¤. ì´ Java 코드는 관리ë˜ì§€ 않는 환경과 JTA 환경 ì–‘ìž"
"ì—ì„œ ì´ì‹ì„±ì´ ìžˆê³ ì‹¤í–‰ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"As outlined earlier, a much more flexible solution is Hibernate's built-in "
"\"current session\" context management:"
msgstr ""
"보다 ë” ìœ ì—°í•œ í•´ê²°ì±…ì€ ì•žì„œ ì„¤ëª…í–ˆë“¯ì´ Hibernateì˜ ë¯¸ë¦¬ 빌드ë˜ì–´ 있는 \"현"
"재 세션\" 컨í…스트 관리ì´ë‹¤:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"You will not see these code snippets in a regular application; fatal "
"(system) exceptions should always be caught at the \"top\". In other words, "
"the code that executes Hibernate calls in the persistence layer, and the "
"code that handles <literal>RuntimeException (and usually can only "
"clean up and exit), are in different layers. The current context management "
"by Hibernate can significantly simplify this design by accessing a "
"<literal>SessionFactory. Exception handling is discussed later in "
"this chapter."
msgstr ""
"ë‹¹ì‹ ì€ í†µìƒì˜ 어플리케ì´ì…˜ì—ì„œ 비지니스 코드 ì†ì— ì´ ê´€ìš©êµ¬ë¥¼ ê²°ì½” 보지 ì•Šì„ "
"것ì´ë‹¤; 치명ì ì¸(시스템) 예외ìƒí™©ë“¤ì€ í•ìƒ \"ìƒë‹¨\"ì—ì„œ 잡혀야 한다. 달리 ë§"
"í•´, (ì˜ì† 계층ì—ì„œ) Hibernate í˜¸ì¶œë“¤ì„ ì‹¤í–‰ì‹œí‚¤ëŠ” 코드와 "
"<literal>RuntimeExceptionì„ ì²˜ë¦¬í•˜(ê³ ëŒ€ê°œ ì˜¤ì§ ì œê±°í•˜ê³ ë¹ ì ¸ë‚˜ê°ˆ "
"수 있는) 코드는 다른 계층들 ì†ì— 있다. Hibernateì— ì˜í•œ 현재 컨í…스트 관리는 "
"ì´ ì„¤ê³„ë¥¼ 현격하게 단순화시켜서, ë‹¹ì‹ ì´ í•„ìš”ë¡œ 하는 ëª¨ë“ ê²ƒì€ "
"<literal>SessionFactoryì— ëŒ€í•œ ì ‘ê·¼ì´ë‹¤.예외ìƒí™© 처리는 ì´ ìž¥ì˜ ë’·"
"부분ì—ì„œ ë…¼ì˜ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"You should select <literal>org.hibernate.transaction.JDBCTransactionFactory"
"\"thread\"</literal> as your hibernate."
"current_session_context_class</literal>."
msgstr ""
"ë‹¹ì‹ ì€ (ë””í´íŠ¸ì¸) <literal>org.hibernate.transaction.JDBCTransactionFactoryhibernate."
"current_session_context_class</literal>를 ì„ íƒí•´ì•¼ í•¨ì„ ë…¸íŠ¸í•˜ë¼."
#. Tag: title
#, no-c-format
msgid "Using JTA"
msgstr "JTA 사용하기"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"If your persistence layer runs in an application server (for example, behind "
"EJB session beans), every datasource connection obtained by Hibernate will "
"automatically be part of the global JTA transaction. You can also install a "
"standalone JTA implementation and use it without EJB. Hibernate offers two "
"strategies for JTA integration."
msgstr ""
"ë§Œì¼ ë‹¹ì‹ ì˜ ì˜ì† ê³„ì¸µì´ ì–´í”Œë¦¬ì¼€ì´ì…˜ 서버ì—ì„œ(예를 들어, EJB 세션 빈즈 ì´ë©´ì—"
"ì„œ) 실행ë 경우, Hibernateì— ì˜í•´ íšë“ëœ ëª¨ë“ ë°ì´í„°ì†ŒìŠ¤ ì»¤ë„¥ì…˜ì€ ìžë™ì 으로 "
"ì „ì— JTA 트랜ìžì…˜ì˜ ë¶€ë¶„ì¼ ê²ƒì´ë‹¤. ë‹¹ì‹ ì€ ë˜í•œ ìŠ¤íƒ ë“œì–¼ë¡ JTA êµ¬í˜„ì„ ì„¤ì¹˜í• "
"수 ìžˆê³ EJB ì—†ì´ ê·¸ê²ƒì„ ì‚¬ìš©í• ìˆ˜ 있다. Hibernate는 JTA í†µí•©ì„ ìœ„í•œ ë‘ ê°œì˜ "
"ë°©ë„ë“¤ì„ ì œê³µí•œë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"If you use bean-managed transactions (BMT), Hibernate will tell the "
"application server to start and end a BMT transaction if you use the "
"<literal>Transaction API. The transaction management code is "
"identical to the non-managed environment."
msgstr ""
"ë§Œì¼ ë‹¹ì‹ ì´ bean-managed transactions(BMT)를 ì‚¬ìš©í• ê²½ìš° Hibernate는 ë‹¹ì‹ ì´ "
"<literal>Transaction API를 ì‚¬ìš©í• ê²½ìš°ì— BMT 트랜ìžì…˜ì„ ì‹œìž‘í•˜ê³ ì¢…"
"료하ë„ë¡ ì–´í”Œë¦¬ì¼€ì´ì…˜ 서버ì—게 ì•Œë ¤ì¤„ 것ì´ë‹¤. ë”°ë¼ì„œ 트랜ìžì…˜ 관리 코드는 "
"non-managed 환경과 ë™ì¼í•˜ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"If you want to use a transaction-bound <literal>Session, that is, "
"the <literal>getCurrentSession() functionality for easy context "
"propagation, use the JTA <literal>UserTransaction API directly:"
msgstr ""
"ë§Œì¼ ë‹¹ì‹ ì´ íŠ¸ëžœìžì…˜ì— ë¬¶ì¸ <literal>Session, 즉 쉬운 컨í…스트 보급"
"ì„ ìœ„í•œ <literal>getCurrentSession() ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ê³ ìž ì›í• 경우, "
"ë‹¹ì‹ ì€ JTA <literal>UserTransaction API를 ì§ì ‘ 사용해야 í• ê²ƒì´ë‹¤:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"With CMT, transaction demarcation is completed in session bean deployment "
"descriptors, not programmatically. The code is reduced to:"
msgstr ""
"CMTì˜ ê²½ìš°, 트랜ìžì…˜ ê´€í• [경계 ì„¤ì •]ì€ í”„ë¡œê·¸ëž¨ ìƒì´ ì•„ë‹Œ, session bean 배치 "
"디스í¬ë¦½í„°ë“¤ ì†ì—ì„œ 행해진다. 그러므로 코드는 다ìŒìœ¼ë¡œ ê°ì†Œëœë‹¤:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"In a CMT/EJB, even rollback happens automatically. An unhandled "
"<literal>RuntimeException thrown by a session bean method tells "
"the container to set the global transaction to rollback. <emphasis>You do "
"not need to use the Hibernate <literal>Transaction API at all with "
"BMT or CMT, and you get automatic propagation of the \"current\" Session "
"bound to the transaction.</emphasis>"
msgstr ""
"왜ëƒí•˜ë©´ í•˜ë‚˜ì˜ ì„¸ì…˜ 빈 ë©”ì†Œë“œì— ì˜í•´ ë˜ì ¸ì§„ 처리ë˜ì§€ ì•Šì€ "
"<literal>RuntimeExceptionì´ ê¸€ë¡œë²Œ 트랜ìžì…˜ì„ rollback으로 ì„¤ì •í•˜ë„"
"ë¡ ì»¨í…Œì´ë„ˆì—게 ì•Œë ¤ì£¼ê¸° 때문ì—, CMT/EJBì—서조차 ë¡¤ë°±ì€ ìžë™ì 으로 ë°œìƒëœë‹¤. "
"<emphasis>ì´ê²ƒì€ ë‹¹ì‹ ì´ BMT ì´ë“ CMTì´ë“ 모ë‘ì—ì„œ Hibernate "
"<literal>Transaction API를 ì‚¬ìš©í• í•„ìš”ê°€ 없으며, ë‹¹ì‹ ì€ ê·¸ 트랜ìžì…˜"
"ì— ë¬¶ì¸ \"현재\" Sessionì˜ ìžë™ì ì¸ ë³´ê¸‰(propagation)ì„ ì–»ê²Œ ë¨ì„ ì˜ë¯¸í•œë‹¤.</"
"emphasis>"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"When configuring Hibernate's transaction factory, choose <literal>org."
"hibernate.transaction.JTATransactionFactory</literal> if you use JTA "
"directly (BMT), and <literal>org.hibernate.transaction."
"CMTTransactionFactory</literal> in a CMT session bean. Remember to also set "
"<literal>hibernate.transaction.manager_lookup_class. Ensure that "
"your <literal>hibernate.current_session_context_class is either "
"unset (backwards compatibility), or is set to <literal>\"jta\"."
msgstr ""
"ë‹¹ì‹ ì´ Hibernateì˜ íŠ¸ëžœìžì…˜ íŒ©í† ë¦¬ë¥¼ êµ¬ì„±í• ë•Œ, ë‹¹ì‹ ì´ JTA를 ì§ì ‘ ì‚¬ìš©í• ê²½ìš°"
"(BMT) ë‹¹ì‹ ì€ <literal>org.hibernate.transaction.JTATransactionFactoryorg.hibernate."
"transaction.CMTTransactionFactory</literal>를 ì„ íƒí•´ì•¼ í•¨ì„ ë…¸íŠ¸í•˜ë¼. ë˜í•œ "
"<literal>org.hibernate.transaction.manager_lookup_class를 ì„¤ì •í•˜ëŠ” "
"ê²ƒì„ ì—¼ë‘ì— ë‘ë¼. 게다가 반드시 ë‹¹ì‹ ì˜ <literal>hibernate."
"current_session_context_class</literal>ì´ ì„¤ì •ë˜ì§€ ì•Šë„ë¡ í•˜ê±°ë‚˜(ì—호환성), "
"ë˜ëŠ” <literal>\"jta\"ë¡œ ì„¤ì •ë˜ë„ë¡ í•˜ë¼."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The <literal>getCurrentSession() operation has one downside in a "
"JTA environment. There is one caveat to the use of <literal>after_statement or "
"<literal>Iterator instances returned by scroll()iterate(). You must "
"release the underlying database cursor by calling <literal>ScrollableResults."
"close()</literal> or Hibernate.close(Iterator) explicitly "
"from a <literal>finally block. Most applications can easily avoid "
"using <literal>scroll() or iterate() from the "
"JTA or CMT code.)"
msgstr ""
"<literal>getCurrentSession() 오í¼ë ˆì´ì…˜ë“¤ì€ JTA 환경ì—ì„œ í•œ 가지 단"
"ì ì„ ê°–ê³ ìžˆë‹¤. ë””í´íŠ¸ë¡œ 사용ë˜ëŠ”, <literal>after_statement 커넥션 "
"í•´ì œ 모드 ì‚¬ìš©ì— ëŒ€í•œ í•˜ë‚˜ì˜ ë³´ë¥˜ 통보가 존재한다. JTA ëª…ì„¸ì„œì˜ ì–´ë¦¬ì„ì€ ì œí•œ"
"으로 ì¸í•´, Hibernateê°€ <literal>scroll() ë˜ëŠ” iterate()ScrollableResultsIterator ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ ìžë™ì 으로 ì œê±°í•˜ëŠ” 것"
"ì´ ë¶ˆê°€ëŠ¥í•˜ë‹¤. ë‹¹ì‹ ì€ <literal>finally ë¸”ë¡ ë‚´ì—ì„œ 명시ì 으로 "
"<literal>ScrollableResults.close() ë˜ëŠ” Hibernate.close"
"(Iterator)</literal>를 호출하여 기본 ë°ì´í„°ë² ì´ìŠ¤ 커서를 í•´ì œì‹œì¼œ"
"야 한다</emphasis>.(ë¬¼ë¡ ëŒ€ë¶€ë¶„ì˜ ì–´í”Œë¦¬ì¼€ì´ì…˜ë“¤ì€ JTA ë˜ëŠ” CMT 코드ì—ì„œ "
"<literal>scroll()ì´ë‚˜ iterate()를 사용하는 ê²ƒì„ "
"쉽게 í”¼í• ìˆ˜ 있다.)"
#. Tag: title
#, no-c-format
msgid "Exception handling"
msgstr "예외ìƒí™© 처리"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"If the <literal>Session throws an exception, including any "
"<literal>SQLException, immediately rollback the database "
"transaction, call <literal>Session.close() and discard the "
"<literal>Session instance. Certain methods of Sessionnot leave the session in a consistent "
"state. No exception thrown by Hibernate can be treated as recoverable. "
"Ensure that the <literal>Session will be closed by calling "
"<literal>close() in a finally block."
msgstr ""
"만ì¼<literal>Sessionì´ (ì–´ë–¤ SQLExceptionì„ í¬í•¨"
"하는) 예외ìƒí™©ì„ ë˜ì§ˆ 경우, ë‹¹ì‹ ì€ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì„ 즉시 ë¡¤ë°±ì‹œí‚¤ê³ , "
"<literal>Session.close()를 í˜¸ì¶œí•˜ê³ Session ì¸ìŠ¤"
"턴스를 í기시켜야한다. <literal>Sessionì˜ ì–´ë–¤ ë©”ì†Œë“œë“¤ì€ ê·¸ 세션"
"ì„ ì¼ê´€ëœ ìƒíƒœë¡œ 남겨ë‘지 <emphasis>ì•Šì„ ê²ƒì´ë‹¤. Hibernateì— ì˜í•´ "
"ë˜ì ¸ì§„ 예외ìƒí™©ì€ 복구가능한 것으로 취급ë 수 없다. ê·¸ <literal>Sessionfinally ë¸”ë¡ ë‚´ì—ì„œ close()"
"를 호출하여 닫혀지ë„ë¡ í™•ì‹¤ížˆ 하ë¼."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The <literal>HibernateException, which wraps most of the errors "
"that can occur in a Hibernate persistence layer, is an unchecked exception. "
"It was not in older versions of Hibernate. In our opinion, we should not "
"force the application developer to catch an unrecoverable exception at a low "
"layer. In most systems, unchecked and fatal exceptions are handled in one of "
"the first frames of the method call stack (i.e., in higher layers) and "
"either an error message is presented to the application user or some other "
"appropriate action is taken. Note that Hibernate might also throw other "
"unchecked exceptions that are not a <literal>HibernateException. "
"These are not recoverable and appropriate action should be taken."
msgstr ""
"Hibernate ì˜ì† 계층ì—ì„œ ë°œìƒí• 수 있는 ëŒ€ë¶€ë¶„ì˜ ì˜¤ë¥˜ë“¤ì„ í¬ìž¥í•˜ëŠ”, "
"<literal>HibernateExceptionì€ ì²´í¬ë˜ì§€ ì•Šì€ ì˜ˆì™¸ìƒí™©ì´ë‹¤(ê·¸ê²ƒì€ "
"Hibernateì˜ ì´ì „ ë²„ì „ì—는 없었다). ìš°ë¦¬ì˜ ì˜ê²¬ìœ¼ë¡œ, 우리는 ë‚®ì€ ê³„ì¸µì—ì„œ 복구"
"불가능한 예외ìƒí™©ì„ 붙잡ë„ë¡ ì–´í”Œë¦¬ì¼€ì´ì…˜ 개발ìžì—게 ê°•ì œí•˜ì§€ ì•Šì„ ê²ƒì´ë‹¤. 대"
"ë¶€ë¶„ì˜ ì‹œìŠ¤í…œë“¤ì—ì„œ, ì²´í¬ë˜ì§€ ì•Šì€ ì¹˜ëª…ì ì¸ ì˜ˆì™¸ìƒí™©ë“¤ì€ (예를 들어, ë” ë†’ì€ "
"계층ì—ì„œ) 메소드 호출 스íƒì˜ 첫 번째 í”„ë ˆìž„ë“¤ 중 하나 ì†ì—ì„œ 처리ë˜ê³ , í•œ ê°œ"
"ì˜ ì˜¤ë¥˜ 메시지가 어플리케ì´ì…˜ 사용ìžì—게 표시ëœë‹¤(ë˜ëŠ” ì–´ë–¤ 다른 ì ì ˆí•œ ì•¡ì…˜"
"ì´ ì·¨í•´ì§„ë‹¤). Hibernate는 ë˜í•œ <literal>HibernateExceptionì´ ì•„ë‹Œ, "
"다른 ì²´í¬ë˜ì§€ ì•Šì€ ì˜ˆì™¸ìƒí™©ë“¤ì„ ë˜ì§ˆ ìˆ˜ë„ ìžˆìŒì„ 노트하ë¼. 다시 ì´ê²ƒë“¤ì€ 복구"
"가능하지 ì•Šê³ ì ì ˆí•œ ì•¡ì…˜ì´ ì·¨í•´ì ¸ì•¼ 한다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Hibernate wraps <literal>SQLExceptions thrown while interacting "
"with the database in a <literal>JDBCException. In fact, Hibernate "
"will attempt to convert the exception into a more meaningful subclass of "
"<literal>JDBCException. The underlying SQLExceptionJDBCException.getCause()SQLException into an "
"appropriate <literal>JDBCException subclass using the "
"<literal>SQLExceptionConverter attached to the "
"<literal>SessionFactory. By default, the "
"<literal>SQLExceptionConverter is defined by the configured "
"dialect. However, it is also possible to plug in a custom implementation. "
"See the javadocs for the <literal>SQLExceptionConverterFactory "
"class for details. The standard <literal>JDBCException subtypes "
"are:"
msgstr ""
"Hibernate는 ë°ì´í„°ë² ì´ìŠ¤ì™€ ìƒí˜¸ìž‘용하는 ë™ì•ˆì— ë˜ì ¸ì§„ <literal>SQLExceptionJDBCException ì†ì— í¬ìž¥í•œë‹¤. 사실, "
"Hibernate는 ê·¸ 예외ìƒí™©ì„ <literal>JDBCExceptionì˜ ë³´ë‹¤ ì˜ë¯¸ìžˆëŠ” ì„œ"
"브í´ëž˜ìŠ¤ë¡œ ë³€í™˜í•˜ë ¤ê³ ì‹œë„í• ê²ƒì´ë‹¤. 기본 <literal>SQLExceptionì€ "
"<literal>JDBCException.getCause()를 통해 í•ìƒ ì´ìš© 가능하다. "
"Hibernate는<literal>SessionFactoryì— ì²¨ë¶€ëœ "
"<literal>SQLExceptionConverter를 사용하여 SQLExceptionJDBCException 서브í´ëž˜ìŠ¤ë¡œ 변환시"
"킨다. ë””í´íŠ¸ë¡œ <literal>SQLExceptionConverter는 êµ¬ì„±ëœ dialectì— ì˜"
"í•´ ì •ì˜ëœë‹¤; 하지만 맞춤 구현 ì†ì— í”ŒëŸ¬ê·¸ì¸ ì‹œí‚¤ëŠ” ê²ƒì´ ë˜í•œ 가능하다(ìƒì„¸í•œ "
"ê²ƒì€ <literal>SQLExceptionConverterFactory í´ëž˜ìŠ¤ì— 관한 javadocs"
"를 ë³´ë¼). 표준 <literal>JDBCException ì„œë¸Œíƒ€ìž…ì€ ë‹¤ìŒê³¼ 같다:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>JDBCConnectionException: indicates an error with the "
"underlying JDBC communication."
msgstr ""
"<literal>JDBCConnectionException - 기본 JDBC í†µì‹ ì— ëŒ€í•œ 오류를 나"
"타낸다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>SQLGrammarException: indicates a grammar or syntax "
"problem with the issued SQL."
msgstr ""
"<literal>SQLGrammarException - ìƒê²¨ë‚œ SQLì— ëŒ€í•œ 문법 ë˜ëŠ” 구문 문"
"ì œì ì„ ë‚˜íƒ€ë‚¸ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>ConstraintViolationException: indicates some form of "
"integrity constraint violation."
msgstr ""
"<literal>ConstraintViolationException - 무결성 ì œì•½ ìœ„ë°˜ì— ê´€í•œ ì–´"
"ë–¤ 형ì‹ì„ 나타낸다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>LockAcquisitionException: indicates an error acquiring a "
"lock level necessary to perform the requested operation."
msgstr ""
"<literal>LockAcquisitionException - ìš”ì²ëœ 오í¼ë ˆì´ì…˜ì„ ì‹¤í–‰í•˜ëŠ”ë° "
"필수ì ì¸ ìž ê¸ˆ ë ˆë²¨ì„ íšë“하는 오류를 나타낸다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>GenericJDBCException: a generic exception which did not "
"fall into any of the other categories."
msgstr ""
"<literal>GenericJDBCException - 다른 ì¹´í…Œê³ ë¦¬ë“¤ 중 ì–´ë–¤ 것으로 분류"
"ë˜ì§€ ì•Šì•˜ë˜ ì¼ë°˜ì ì¸ ì˜ˆì™¸ìƒí™©."
#. Tag: title
#, no-c-format
msgid "Transaction timeout"
msgstr "트랜ìžì…˜ 타임아웃"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"An important feature provided by a managed environment like EJB, that is "
"never provided for non-managed code, is transaction timeout. Transaction "
"timeouts ensure that no misbehaving transaction can indefinitely tie up "
"resources while returning no response to the user. Outside a managed (JTA) "
"environment, Hibernate cannot fully provide this functionality. However, "
"Hibernate can at least control data access operations, ensuring that "
"database level deadlocks and queries with huge result sets are limited by a "
"defined timeout. In a managed environment, Hibernate can delegate "
"transaction timeout to JTA. This functionality is abstracted by the "
"Hibernate <literal>Transaction object."
msgstr ""
"관리ë˜ì§€ 않는 ì½”ë“œì— ëŒ€í•´ì„œëŠ” ê²°ì½” ì œê³µë˜ì§€ 않는 EJB와 ê°™ì´ ê´€ë¦¬ë˜ëŠ” í™˜ê²½ì— "
"ì˜í•´ ì œê³µë˜ëŠ” í•œ 가지 극히 중요한 íŠ¹ì§•ì€ íŠ¸ëžœìžì…˜ 타임아웃ì´ë‹¤. 트랜ìžì…˜ 타임"
"ì•„ì›ƒì€ ì‚¬ìš©ìžì—게 ì‘ë‹µì„ ë°˜í™˜í•˜ì§€ 않는 ë™ì•ˆì— 무례한 í–‰ë™ì„ 행하는 트랜ìžì…˜"
"ì´ ìžì›ë“¤ì„ ë¬´í•œì • 묶어둘 수 ì—†ìŒì„ ë³´ì¦í•´ì¤€ë‹¤. 관리ë˜ëŠ” (JTA) 환경 외부ì—"
"ì„œ, Hibernate는 ì´ ê¸°ëŠ¥ì„ ì˜¨ì „í•˜ê²Œ ì œê³µí• ìˆ˜ 없다. 하지만 Hibernate는 ë°ì´í„°"
"ë² ì´ìŠ¤ ë ˆë²¨ ë°ë“œë½ë“¤ê³¼ 거대한 ê²°ê³¼ ì…‹ë“¤ì„ ê°€ì§„ 질ì˜ë“¤ì´ ì •ì˜ëœ íƒ€ìž„ì•„ì›ƒì— ì˜"
"í•´ ì œì•½ë˜ëŠ” ê²ƒì„ ë³´ìž¥í•¨ìœ¼ë¡œì¨ ìµœì†Œí•œ ë°ì´í„° ì ‘ê·¼ 오í¼ë ˆì´ì…˜ë“¤ì„ ì œì–´í• ìˆ˜ 있"
"다. 관리ë˜ëŠ” 환경ì—ì„œ, Hibernate는 트랜ìžì…˜ íƒ€ìž„ì•„ì›ƒì„ JTAì—게 위임시킬 수 있"
"다. ì´ ê¸°ëŠ¥ì€ Hibernate <literal>Transaction ê°ì²´ì— ì˜í•´ 추ìƒí™” ëœ"
"다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>setTimeout() cannot be called in a CMT bean, where "
"transaction timeouts must be defined declaratively."
msgstr ""
"<literal>setTimeout()ì€ CMT bean ë‚´ì—ì„œ 호출ë„리 수 ì—†ìŒì„ 노트하"
"ë¼. 여기서 트랜ìžì…˜ íƒ€ìž„ì•„ì›ƒë“¤ì€ ì„ ì–¸ì 으로 ì •ì˜ë˜ì–´ì•¼ 한다."
#. Tag: title
#, no-c-format
msgid "Optimistic concurrency control"
msgstr "Optimistic ë™ì‹œì„± ì œì–´"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The only approach that is consistent with high concurrency and high "
"scalability, is optimistic concurrency control with versioning. Version "
"checking uses version numbers, or timestamps, to detect conflicting updates "
"and to prevent lost updates. Hibernate provides three possible approaches to "
"writing application code that uses optimistic concurrency. The use cases we "
"discuss are in the context of long conversations, but version checking also "
"has the benefit of preventing lost updates in single database transactions."
msgstr ""
"ê³ ë„ì˜ ë™ì‹œì„±ê³¼ ê³ ë„ì˜ ê°€ìš©ì„±ì„ ì¼ì¹˜ì‹œí‚¤ëŠ” ìœ ì¼í•œ ì ‘ê·¼ë²•ì€ ë²„ì „í™”ë¥¼ 가진 "
"optimisticë™ì‹œì„± ì œì–´ì´ë‹¤. ë²„ì „ ì²´í‚¹ì€ ì—…ë°ì´íŠ¸ 충ëŒì„ 검출하기 위해(ê·¸ë¦¬ê³ "
"ì—…ë°ì´íŠ¸ ì†ì‹¤ì„ 방지하기 위해) ë²„ì „ 번호들 ë˜ëŠ” timestampë“¤ì„ ì‚¬ìš©í•œë‹¤. "
"Hibernate는 optimistic ë™ì‹œì„±ì„ 사용하는 어플리케ì´ì…˜ 코드 ìž‘ì„±ì— ì„¸ 가지 ê°€"
"능한 ì ‘ê·¼ë²•ë“¤ì„ ì œê³µí•œë‹¤. 우리가 보여주는 ì“°ìž„ìƒˆë“¤ì€ ìž¥ì‹œê°„ì˜ ëŒ€í™”ì˜ ìƒí™© ì†"
"ì— ìžˆì§€ë§Œ, ë²„ì „ 체킹 ë˜í•œ ë‹¨ì¼ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ë“¤ì—ì„œ ì—…ë°ì´íŠ¸ ì†ì‹¤ì„ ë°©"
"지하는 ì´ì ì„ ê°–ê³ ìžˆë‹¤."
#. Tag: title
#, no-c-format
msgid "Application version checking"
msgstr "어플리케ì´ì…˜ ë²„ì „ 체킹"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"In an implementation without much help from Hibernate, each interaction with "
"the database occurs in a new <literal>Session and the developer is "
"responsible for reloading all persistent instances from the database before "
"manipulating them. The application is forced to carry out its own version "
"checking to ensure conversation transaction isolation. This approach is the "
"least efficient in terms of database access. It is the approach most similar "
"to entity EJBs."
msgstr ""
"í•˜ë‚˜ì˜ êµ¬í˜„ì—ì„œ Hibernate로부터 ë§Žì€ ë„ì›€ì´ ì—†ì´, ë°ì´í„°ë² ì´ìŠ¤ì— 대한 ê°ê°ì˜ "
"ìƒí˜¸ìž‘ìš©ì€ ìƒˆë¡œìš´ <literal>Session ë‚´ì—ì„œ ì¼ì–´ë‚˜ê³ , 개발ìžëŠ” ì˜ì† "
"ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 처리하기 ì „ì— ë°ì´í„°ë² ì´ìŠ¤ë¡œë¶€í„° ëª¨ë“ ì˜ì† ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 다시 ë¡œ"
"드시킬 ì±…ìž„ì´ ìžˆë‹¤. ì´ ì ‘ê·¼ë²•ì€ ëŒ€í™” 트랜ìžì…˜ì„ 확실히 격리시키기 위해 그것 "
"ìžì‹ ì˜ ë²„ì „ ì²´í‚¹ì„ ìˆ˜í–‰í•˜ë„ë¡ ì–´í”Œë¦¬ì¼€ì´ì…˜ì—게 ê°•ì œì‹œí‚¨ë‹¤."
#. Tag: para
#, no-c-format
msgid ""
"The <literal>version property is mapped using <"
"version></literal>, and Hibernate will automatically increment it during "
"flush if the entity is dirty."
msgstr ""
"version 프로í¼í‹°ëŠ” <literal><version>ì„ ì‚¬ìš©í•˜ì—¬ 매핑ë˜ê³ , "
"Hibernate는 ë§Œì¼ ì—”í‹°í‹°ê°€ dirtyì¼ ê²½ìš° flush ë™ì•ˆì— ê·¸ê²ƒì„ ìžë™ì 으로 ì¦ê°€ì‹œ"
"킬 것ì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"If you are operating in a low-data-concurrency environment, and do not "
"require version checking, you can use this approach and skip the version "
"check. In this case, <emphasis>last commit wins is the default "
"strategy for long conversations. Be aware that this might confuse the users "
"of the application, as they might experience lost updates without error "
"messages or a chance to merge conflicting changes."
msgstr ""
"ë¬¼ë¡ , ë‹¹ì‹ ì´ ë‚®ì€ ë°ì´í„° ë™ì‹œì„± 환경ì—ì„œ ìž‘ì—…í•˜ê³ ìžˆê³ ë²„ì „ ì²´í‚¹ì„ í•„ìš”ë¡œ 하"
"지 ì•Šì„ ê²½ìš°ì—, ë‹¹ì‹ ì€ ì´ ì ‘ê·¼ë²•ì„ ì‚¬ìš©í• ìˆ˜ ë„ ìžˆê³ ë‹¨ì§€ ë²„ì „ ì²´í¬ë¥¼ ìƒëžµí• "
"ìˆ˜ë„ ìžˆë‹¤. ê·¸ 경우ì—, <emphasis>ë§ˆì§€ë§‰ì˜ ì»¤ë°‹ ì„±ê³µì€ ë‹¹ì‹ ì˜ ìž¥ì‹œê°„"
"ì˜ ëŒ€í™”ì— ëŒ€í•œ ë””í´íŠ¸ ë°©ë„ê°€ ë 것ì´ë‹¤. ì´ê²ƒì´ 어플리케ì´ì…˜ì˜ 사용ìžë“¤ì„ 혼ë™"
"시킬 수 있ìŒì„ ì—¼ë‘ì— ë‘ë¼. 왜ëƒí•˜ë©´ 사용ìžë“¤ì€ 오류 메시지들 ë˜ëŠ” ì¶©ëŒ ë³€ê²½"
"ë“¤ì„ ë³‘í•©ì‹œí‚¬ 기회 ì—†ì´ ì—…ë°ì´íŠ¸ë“¤ ì†ì‹¤ì„ ê²ªì„ ìˆ˜ë„ ìžˆê¸° 때문ì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Manual version checking is only feasible in trivial circumstances and not "
"practical for most applications. Often not only single instances, but "
"complete graphs of modified objects, have to be checked. Hibernate offers "
"automatic version checking with either an extended <literal>Session ë˜ëŠ” detached ì¸ìŠ¤í„´ìŠ¤ë“¤ì— 대해 ìžë™ì ì¸ ë²„"
"ì „ ì²´í‚¹ì„ ì œê³µí•œë‹¤."
#. Tag: title
#, no-c-format
msgid "Extended session and automatic versioning"
msgstr "í™•ìž¥ëœ ì„¸ì…˜ê³¼ ìžë™ì ì¸ ë²„ì „í™”"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"A single <literal>Session instance and its persistent instances "
"that are used for the whole conversation are known as <emphasis>session-per-"
"conversation</emphasis>. Hibernate checks instance versions at flush time, "
"throwing an exception if concurrent modification is detected. It is up to "
"the developer to catch and handle this exception. Common options are the "
"opportunity for the user to merge changes or to restart the business "
"conversation with non-stale data."
msgstr ""
"í•˜ë‚˜ì˜ <literal>Session ì¸ìŠ¤í„´ìŠ¤ì™€ ê·¸ê²ƒì˜ ì˜ì† ì¸ìŠ¤í„´ìŠ¤ë“¤ì€ ì „ì²´ ì–´"
"플리케ì´ì…˜ 트랜ìžì…˜ì— 사용ëœë‹¤. Hibernate는 flush í• ë•Œ ì¸ìŠ¤í„´ìŠ¤ ë²„ì „ë“¤ì„ ì²´"
"í¬í•˜ê³ ë§Œì¼ ë™ì‹œì„± ë³€ê²½ì´ ê²€ì¶œë ê²½ìš°ì— ì˜ˆì™¸ìƒí™©ì„ ë˜ì§„다. ì´ ì˜ˆì™¸ìƒí™©ì„ ìž¡ì•„"
"ë‚´ê³ ì²˜ë¦¬í•˜ëŠ” ê²ƒì„ ê°œë°œìžì˜ 몫ì´ë‹¤(ê³µí†µëœ ì˜µì…˜ë“¤ì€ ë³€ê²½ë“¤ì„ ë³‘í•©ì‹œí‚¤ê±°ë‚˜ ë˜"
"는 쓸모가 없지 ì•Šì€ ë°ì´í„°ë¡œ 비지니스 프로세스를 다시 시작하는 기회를 사용ìž"
"ì—게 주는 것ì´ë‹¤). í•˜ë‚˜ì˜ <literal>Session ì¸ìŠ¤í„´ìŠ¤ì™€ ê·¸ê²ƒì˜ ì˜ì† "
"ì¸ìŠ¤í„´ìŠ¤ë“¤ì€ <emphasis>session-per-conversationë¡œ ì•Œë ¤ì§„ ì „ì²´ 대화"
"ì— ì‚¬ìš©ëœë‹¤. Hibernate는 flush ì‹œì ì—ì„œ ì¸ìŠ¤í„´ìŠ¤ ë²„ì „ë“¤ì„ ì²´í¬í•˜ë©°, ë§Œì¼ ë™ì‹œ"
"ì ì¸ ë³€ê²½ì´ ê²€ì¶œë ê²½ìš°ì— í•˜ë‚˜ì˜ ì˜ˆì™¸ìƒí™©ì„ ë˜ì§„다. ì´ ì˜ˆì™¸ìƒí™©ì„ í¬ì°©í•˜ê³ 처"
"리하는 ê²ƒì€ ê°œë°œìžì˜ 몫ì´ë‹¤(ê³µí†µëœ ì˜µì…˜ë“¤ì€ ì‚¬ìš©ìžê°€ ë³€ê²½ë“¤ì„ ë³‘í•©í•˜ê±°ë‚˜ ì†ì‹¤"
"ë˜ì§€ ì•Šì€ ë°ì´í„°ë¥¼ ê°€ì§€ê³ ë¹„ì§€ë‹ˆìŠ¤ 대화를 재시작하는 기회ì´ë‹¤)."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The <literal>Session is disconnected from any underlying JDBC "
"connection when waiting for user interaction. This approach is the most "
"efficient in terms of database access. The application does not version "
"check or reattach detached instances, nor does it have to reload instances "
"in every database transaction."
msgstr ""
"<literal>Sessionì€ ì‚¬ìš©ìž ìƒí˜¸ìž‘ìš©ì„ ê¸°ë‹¤ë¦´ ë•Œ ì–´ë–¤ 기본 JDBC 커넥"
"션으로부터 ì—°ê²°í•´ì œëœë‹¤. ì´ ì ‘ê·¼ë²•ì€ ë°ì´í„°ë² ì´ìŠ¤ ì ‘ê·¼ì˜ ê´€ì ì—ì„œ ë³´ë©´ 가장 "
"효율ì ì´ë‹¤. 어플리케ì´ì…˜ì€ ë²„ì „ 체킹 ë˜ëŠ” detached ì¸ìŠ¤í„´ìŠ¤ë“¤ì„ 재첨부하는 것"
"ì— ê·¸ ìžì²´ ê´€ê³„í• í•„ìš”ê°€ 없거나 ê·¸ê²ƒì€ ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì—ì„œ ì¸ìŠ¤í„´"
"ìŠ¤ë“¤ì„ ë‹¤ì‹œ 로드시킬 필요가 없다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The <literal>foo object knows which Session it "
"was loaded in. Beginning a new database transaction on an old session "
"obtains a new connection and resumes the session. Committing a database "
"transaction disconnects a session from the JDBC connection and returns the "
"connection to the pool. After reconnection, to force a version check on data "
"you are not updating, you can call <literal>Session.lock() with "
"<literal>LockMode.READ on any objects that might have been updated "
"by another transaction. You do not need to lock any data that you "
"<emphasis>are updating. Usually you would set FlushMode."
"MANUAL</literal> on an extended Session, so that only the "
"last database transaction cycle is allowed to actually persist all "
"modifications made in this conversation. Only this last database transaction "
"will include the <literal>flush() operation, and then "
"<literal>close() the session to end the conversation."
msgstr ""
"<literal>foo ê°ì²´ëŠ” ê·¸ê²ƒì´ ë¡œë“œë˜ì—ˆë˜ Sessionì´ "
"ì–´ëŠ ê²ƒì¸ì§€ë¥¼ ì—¬ì „ížˆ ì•Œê³ ìžˆë‹¤. ì´ì „ 세션 ìƒì—ì„œ í•˜ë‚˜ì˜ ìƒˆë¡œìš´ ë°ì´í„°ë² ì´ìŠ¤ "
"트랜ìžì…˜ì„ 시작하는 ê²ƒì€ í•˜ë‚˜ì˜ ìƒˆë¡œìš´ ì»¤ë„¥ì…˜ì„ íšë“í•˜ê³ ê·¸ ì„¸ì…˜ì„ ì†Œë¹„í•œë‹¤. "
"ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ì„ 커밋(확약)시키는 ê²ƒì€ ê·¸ JDBC 커넥션으로부터 í•˜ë‚˜ì˜ "
"ì„¸ì…˜ì„ ì—°ê²°í•´ì œì‹œí‚¤ê³ ê·¸ ì»¤ë„¥ì…˜ì„ í’€(pool)ë¡œ 반환시킬 것ì´ë‹¤. 재연결 후ì—, 당"
"ì‹ ì´ ì—…ë°ì´íŠ¸í•˜ê³ 있지 ì•Šì€ ë°ì´í„°ì— 대한 ë²„ì „ ì²´í¬ë¥¼ ê°•ì œì‹œí‚¤ê¸° 위해서, ë‹¹ì‹ "
"ì€ ë˜ ë‹¤ë¥¸ 트랜ìžì…˜ì— ì˜í•´ ì—…ë°ì´íŠ¸ë˜ì—ˆì„ ìˆ˜ë„ ìžˆëŠ” ìž„ì˜ì˜ ê°ì²´ë“¤ì— 대해 "
"<literal>LockMode.READ로서 Session.lock()ì„ í˜¸ì¶œ"
"í• ìˆ˜ë„ ìžˆë‹¤. ë‹¹ì‹ ì€ ë‹¹ì‹ ì´ ì—…ë°ì´íŠ¸ ì¤‘ì¸ ìž„ì˜ì˜ ë°ì´í„°ë¥¼ ìž ê¸ˆí• í•„ìš”ê°€ ì—†"
"다. 대개 ë‹¹ì‹ ì€ ë§ˆì§€ë§‰ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ ì£¼ê¸°ë§Œì´ ì´ ëŒ€í™” ë‚´ì—ì„œ 행해진 "
"ëª¨ë“ ë³€ê²½ë“¤ì„ ì‹¤ì œë¡œ ì˜ì†í™”시키는 ê²ƒì´ í—ˆìš©ë˜ë„ë¡ í•˜ê¸° 위해, í•˜ë‚˜ì˜ í™•ìž¥ëœ "
"<literal>Sessionì— ëŒ€í•´ FlushMode.MANUAL를 ì„¤ì •"
"í• ê²ƒì´ë‹¤. 그러므로 ì˜¤ì§ ì´ ë§ˆì§€ë§‰ ë°ì´í„°ë² ì´ìŠ¤ 트랜ìžì…˜ ë§Œì´ <literal>flush"
"()</literal> 오í¼ë ˆì´ì…˜ì„ í¬í•¨í• 것ì´ê³ , ë˜í•œ 대화를 종료시키기 위해 ì„¸ì…˜ì„ "
"<literal>close()í• ê²ƒì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"This pattern is problematic if the <literal>Session is too big to "
"be stored during user think time (for example, an <literal>HttpSessionSession only for a single conversation as it will soon "
"have stale data."
msgstr ""
"ë§Œì¼ ì‚¬ìš©ìžê°€ ìƒê°í•˜ëŠ”시간 ë™ì•ˆ <literal>Sessionì´ ì €ìž¥ë˜ê¸°ì— 너무 "
"í° ê²½ìš° ì´ íŒ¨í„´ì€ ë¬¸ì œì„±ì´ ìžˆë‹¤. 예를 들어 <literal>HttpSessionì€ "
"가능한 ìž‘ì€ ê²ƒìœ¼ë¡œ ìœ ì§€ë˜ì–´ì•¼ 한다. ë˜í•œ <literal>Sessionì€ (필수"
"ì˜) 첫 번째 ë ˆë²¨ ìºì‹œì´ê³ ëª¨ë“ ë¡œë“œëœ ê°ì²´ë“¤ì„ í¬í•¨í•˜ê¸° 때문ì—, 우리는 아마 "
"ì ì€ ìš”ì²/ì‘답 ì£¼ê¸°ë“¤ì— ëŒ€í•´ì„œë§Œ ì´ ë°©ë„를 ì‚¬ìš©í• ìˆ˜ 있다. ë‹¹ì‹ ì€ í•˜ë‚˜ì˜ ëŒ€í™”"
"ì— ëŒ€í•´ì„œë§Œ í•˜ë‚˜ì˜ <literal>Sessionì„ ì‚¬ìš©í•´ì•¼ 한다. 왜ëƒí•˜ë©´ 그것"
"ì€ ë˜í•œ 곧 실없는 ë°ì´í„°ê°€ ë 것ì´ê¸° 때문ì´ë‹¤."
#. Tag: title
#, no-c-format
msgid "Note"
msgstr ""
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Earlier versions of Hibernate required explicit disconnection and "
"reconnection of a <literal>Session. These methods are deprecated, "
"as beginning and ending a transaction has the same effect."
msgstr ""
"(ì´ˆê¸°ì˜ Hibernate ë²„ì „ë“¤ì€ <literal>Sessionì— ëŒ€í•œ 명시ì ì¸ ì—°ê²°í•´"
"ì œì™€ ìž¬ì—°ê²°ì„ í•„ìš”ë¡œ í–ˆìŒì„ 노트하ë¼. 트랜ìžì…˜ì„ ì‹œìž‘í•˜ê³ ë내는 ê²ƒì´ ë™ì¼í•œ "
"효과를 가지므로, ì´ë“¤ ë°©ë²•ë“¤ì€ ì§„ë¶€í•˜ê²Œ ë˜ì—ˆë‹¤.)"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Keep the disconnected <literal>Session close to the persistence "
"layer. Use an EJB stateful session bean to hold the <literal>Session."
msgstr ""
"ë˜í•œ ë‹¹ì‹ ì€ ì˜ì† ê³„ì¸µì— ëŒ€í•´ ì—°ê²°í•´ì œëœ <literal>Sessionì„ ë‹«í˜€ì§„ì±„"
"ë¡œ ìœ ì§€í•´ì•¼í•¨ì„ ë…¸íŠ¸í•˜ë¼. 달 리ë§í•´, í•˜ë‚˜ì˜ 3-tier 환경ì—ì„œ "
"<literal>Sessionì„ ì†Œìœ í•˜ëŠ”ë° EJB stateful session beanì„ ì‚¬ìš©í•˜"
"ê³ , <literal>HttpSession ë‚´ì— ê·¸ê²ƒì„ ì €ìž¥í•˜ê¸° 위해 ê·¸ê²ƒì„ ì›¹ 계층"
"ì— ì „ì†¡í•˜ì§€ ë§ë¼ (ë˜ëŠ” ê·¸ê²ƒì„ ë³„ë„ì˜ í‹°ì–´ì— ì§ë ¬í™” ì‹œí‚¤ì§€ë„ ë§ë¼)."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The extended session pattern, or <emphasis>session-per-conversation for this. See the Hibernate Wiki "
"for examples."
msgstr ""
"í™•ìž¥ëœ ì„¸ì…˜ 패턴, ë˜ëŠ” <emphasis>session-per-conversationì€ ìžë™ì "
"ì¸ í˜„ìž¬ 세션 컨í…스트 ê´€ë¦¬ì— ëŒ€í•´ 구현하기가 ë” ì–´ë µë‹¤. ë‹¹ì‹ ì€ ì´ë¥¼ 위해 당"
"ì‹ ìžì‹ ì˜ <literal>CurrentSessionContext êµ¬í˜„ì„ ê³µê¸‰í• í•„ìš”ê°€ 있으"
"ë©°, ì˜ˆì œë“¤ì€ Hibernate Wiki를 ë³´ë¼."
#. Tag: title
#, no-c-format
msgid "Detached objects and automatic versioning"
msgstr "Detached ê°ì²´ë“¤ê³¼ ìžë™ì ì¸ ë²„ì „í™”"
#. Tag: para
#, no-c-format
msgid ""
"Each interaction with the persistent store occurs in a new <literal>Session "
"and then reattaches them using <literal>Session.update(), "
"<literal>Session.saveOrUpdate(), or Session.merge()ì—ì„œ ì¼"
"어난다. 하지만 ë™ì¼í•œ ì˜ì† ì¸ìŠ¤í„´ìŠ¤ë“¤ì€ ë°ì´í„°ë² ì´ìŠ¤ì™€ì˜ ê°ê°ì˜ ìƒí˜¸ìž‘ìš©ì— ìž¬"
"사용ëœë‹¤. 어플리케ì´ì…˜ì€ ì›ëž˜ 로드ë˜ì—ˆë˜ detached ì¸ìŠ¤í„´ìŠ¤ë“¤ì˜ ìƒíƒœë¥¼ ë˜ ë‹¤"
"른 <literal>Session ë‚´ì—ì„œ ì²˜ë¦¬í•˜ê³ ë‚˜ì„œ Session.update()"
"</literal>, Session.saveOrUpdate(), Session.merge"
"()</literal>를 사용하여 ê·¸ê²ƒë“¤ì„ ë‹¤ì‹œ 첨부시킨다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Again, Hibernate will check instance versions during flush, throwing an "
"exception if conflicting updates occurred."
msgstr ""
"다시, Hibernate는 flush ë™ì•ˆì— ì¸ìŠ¤í„´ìŠ¤ ë²„ì „ë“¤ì„ ì²´í¬í• 것ì´ê³ ì—…ë°ì´íŠ¸ 충ëŒ"
"ì´ ë°œìƒí• ê²½ìš°ì— ì˜ˆì™¸ìƒí™©ì„ ë˜ì§ˆ 것ì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"You can also call <literal>lock() instead of update()LockMode.READ (performing a version "
"check and bypassing all caches) if you are sure that the object has not been "
"modified."
msgstr ""
"ë‹¹ì‹ ì€ ë˜í•œ <literal>update()ëŒ€ì‹ ì— lock()ì„ í˜¸"
"ì¶œí• ìˆ˜ë„ ìžˆê³ ë§Œì¼ ê·¸ ê°ì²´ê°€ 변경ë˜ì§€ 않았ìŒì„ ë‹¹ì‹ ì´ í™•ì‹ í•˜ëŠ” ê²½ìš°ì— (ë²„ì „ "
"ì²´í‚¹ì„ ìˆ˜í–‰í•˜ê³ ëª¨ë“ ìºì‹œë“¤ì„ 무시하는) <literal>LockMode.READ를 사"
"ìš©í• ìˆ˜ 있다."
#. Tag: title
#, no-c-format
msgid "Customizing automatic versioning"
msgstr "ìžë™ì ì¸ ë²„ì „í™”ë¥¼ 맞춤화 시키기"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"You can disable Hibernate's automatic version increment for particular "
"properties and collections by setting the <literal>optimistic-lock "
"mapping attribute to <literal>false. Hibernate will then no longer "
"increment versions if the property is dirty."
msgstr ""
"ë‹¹ì‹ ì€ <literal>optimistic-lock 매핑 ì†ì„±ì„ false in the "
"<literal><class> mapping. This conceptually only works if "
"Hibernate can compare the old and the new state (i.e., if you use a single "
"long <literal>Session and not session-per-request-with-detached-"
"objects)."
msgstr ""
"리거시 ë°ì´í„°ë² ì´ìŠ¤ ìŠ¤í‚¤ë§ˆë“¤ì€ ìžì£¼ staticì´ê³ 변경ë 수 없다. ë˜ëŠ” 다른 어플"
"리케ì´ì…˜ë“¤ì€ ë˜í•œ ë™ì¼í•œ ë°ì´í„°ë² ì´ìŠ¤ì— ì ‘ê·¼í•˜ê³ ë²„ì „ 번호들 ë˜ëŠ” 심지어 "
"timestampë“¤ì„ ì²˜ë¦¬í•˜ëŠ” ë°©ë²•ì„ ëª¨ë¥¼ ìˆ˜ë„ ìžˆë‹¤. ë‘ ê²½ìš°ë“¤ì—ì„œ, ë²„ì „í™”ëŠ” í…Œì´ë¸” "
"ë‚´ì˜ íŠ¹ì • ì»¬ëŸ¼ì— ì˜ì§€í• 수 없다. version ë˜ëŠ” timestamp 프로í¼í‹° 매핑 ì—†ì´ "
"í–‰ ë‚´ì˜ ëª¨ë“ í•„ë“œë“¤ì— ëŒ€í•œ ìƒíƒœë¥¼ 비êµí•˜ì—¬ ë²„ì „ ì²´í¬ë¥¼ ê°•ì œì‹œí‚¤ê¸° 위해서, "
"<literal><class> 매핑 ì†ì— optimistic-lock=\"all\"ì„ ì‚¬ìš©í•˜ê³ "
"session-per-request-with-detached-objectsì„ ì‚¬ìš©í•˜ì§€ ì•Šì„ ê²½ìš° ì´ê²ƒì€ ê°œë…ì "
"으로만 ë™ìž‘í•¨ì„ ë…¸íŠ¸í•˜ë¼."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Concurrent modification can be permitted in instances where the changes that "
"have been made do not overlap. If you set <literal>optimistic-lock=\"dirty"
"\"</literal> when mapping the <class>, Hibernate "
"will only compare dirty fields during flush."
msgstr ""
"때때로 í–‰í•´ì¡Œë˜ ë³€ê²½ë“¤ì´ ì¤‘ì²©ë˜ì§€ 않는 í•œ ë™ì‹œì ì¸ ë³€ê²½ì´ í—ˆìš©ë 수 있다. 만"
"ì¼ <literal><class>를 ë§¤í•‘í• ë•Œ ë‹¹ì‹ ì´ optimistic-"
"lock=\"dirty\"</literal>를 ì„¤ì •í•˜ë©´, Hibernate는 flush ë™ì•ˆì— dirty í•„ë“œë“¤ì„ "
"비êµë§Œ í• ê²ƒì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"In both cases, with dedicated version/timestamp columns or with a full/dirty "
"field comparison, Hibernate uses a single <literal>UPDATE "
"statement, with an appropriate <literal>WHERE clause, per entity "
"to execute the version check and update the information. If you use "
"transitive persistence to cascade reattachment to associated entities, "
"Hibernate may execute unnecessary updates. This is usually not a problem, "
"but <emphasis>on update triggers in the database might be "
"executed even when no changes have been made to detached instances. You can "
"customize this behavior by setting <literal>select-before-update=\"true\"<class> mapping, forcing Hibernate "
"to <literal>SELECT the instance to ensure that changes did occur "
"before updating the row."
msgstr ""
"ë‘ ê²½ìš°ë“¤ì—ì„œ, ì „ìš© version/timestamp ì»¬ëŸ¼ì˜ ê²½ìš° ë˜ëŠ” full/dirty í•„ë“œ 비êµ"
"ì˜ ê²½ìš°, Hibernate는 ë²•ì „ ì²´í¬ë¥¼ ì‹¤í–‰í•˜ê³ ì •ë³´ë¥¼ ì—…ë°ì´íŠ¸í•˜ëŠ”ë° ì—”í‹°í‹° 당 (ì "
"ì ˆí•œ <literal>WHERE ì ˆì„ ê°€ì§„) í•œ ê°œì˜UPDATE 문"
"ìž¥ì„ ì‚¬ìš©í•œë‹¤. ë§Œì¼ ë‹¹ì‹ ì´ ì—°ê´€ëœ ì—”í‹°í‹°ë“¤ì— ëŒ€í•œ 재첨부를 케스케ì´ë“œ í•˜ëŠ”ë° "
"transitive ì˜ì†ì„ ì‚¬ìš©í• ê²½ìš°, Hibernate는 불필요하게 ì—…ë°ì´íŠ¸ë“¤ì„ ì‹¤í–‰í• ìˆ˜"
"ë„ ìžˆë‹¤. ì´ê²ƒì€ 대개 ë¬¸ì œê°€ 아니지만, 심지어 ë³€ê²½ë“¤ì´ detached ì¸ìŠ¤í„´ìŠ¤ë“¤ì— "
"대해 행해지지 ì•Šì•˜ì„ ë•Œì—ë„ ë°ì´í„°ë² ì´ìŠ¤ ë‚´ì—ì„œ <emphasis>on update하는 ê²ƒì„ "
"Hibernateì—게 ê°•ì œì‹œí‚¤ëŠ”, <literal><class> 매핑 ì†ì— "
"<literal>select-before-update=\"true\"를 ì„¤ì •í•¨ìœ¼ë¡œì¨ ë‹¹ì‹ ì€ ì´ íŠ¹"
"ì§•ì„ ë§žì¶¤í™” 시킬 수 있다."
#. Tag: title
#, fuzzy, no-c-format
msgid "Pessimistic locking"
msgstr "Pessimistic ìž ê¸ˆ"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"It is not intended that users spend much time worrying about locking "
"strategies. It is usually enough to specify an isolation level for the JDBC "
"connections and then simply let the database do all the work. However, "
"advanced users may wish to obtain exclusive pessimistic locks or re-obtain "
"locks at the start of a new transaction."
msgstr ""
"사용ìžë“¤ì€ ìž ê¸ˆ ë°©ë„ì— ëŒ€í•´ ê±±ì •í•˜ëŠ”ë° ë§Žì€ ì‹œê°„ì„ í• ì• í•˜í•˜ë ¤ê³ ìƒê°í•˜ì§€ 않는"
"다. 대개 JDBC ì»¤ë„¥ì…˜ë“¤ì— ëŒ€í•œ 격리 ë ˆë²¨ì„ ì§€ì •í•˜ëŠ” 것으로 ì¶©ë¶„í•˜ê³ ê·¸ëŸ° ë‹¤ìŒ "
"단순히 ë°ì´í„°ë² ì´ìŠ¤ë¡œ 하여금 ëª¨ë“ ìž‘ì—…ì„ í–‰í•˜ë„ë¡ í•œë‹¤. 하지만 진ì¼ë³´í•œ 사용"
"ìžë“¤ì€ 때때로 배타ì ì¸ pessimistic ìž ê¸ˆë“¤ì„ ì–»ê±°ë‚˜ ë˜ëŠ” 새로운 트랜ìžì…˜ì˜ ì‹œ"
"ìž‘ ì‹œì— ìž ê¸ˆë“¤ì„ ë‹¤ì‹œ ì–»ê³ ìž ì›í• ìˆ˜ë„ ìžˆë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"Hibernate will always use the locking mechanism of the database; it never "
"lock objects in memory."
msgstr ""
"Hibernate는 ê²°ì½” 메모리 ë‚´ì— ìžˆëŠ” ê°ì²´ë“¤ì´ ì•„ë‹Œ, ë°ì´í„°ë² ì´ìŠ¤ì˜ ìž ê¸ˆ 메커니즘"
"ì„ í•ìƒ ì‚¬ìš©í• ê²ƒì´ë‹¤!"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The <literal>LockMode class defines the different lock levels that "
"can be acquired by Hibernate. A lock is obtained by the following mechanisms:"
msgstr ""
"<literal>LockMode í´ëž˜ìŠ¤ëŠ” Hibernateì— ì˜í•´ íšë“ë 수 있는 다른 ìž "
"금 ë ˆë²¨ë“¤ì„ ì •ì˜í•œë‹¤. ìž ê¸ˆì€ ë‹¤ìŒ ë©”ì»¤ë‹ˆì¦˜ë“¤ì— ì˜í•´ 얻어진다:"
#. Tag: para
#, no-c-format
msgid ""
"<literal>LockMode.WRITE is acquired automatically when Hibernate "
"updates or inserts a row."
msgstr ""
"<literal>LockMode.WRITE는 Hibernateê°€ í•œ í–‰ì„ ì—…ë°ì´íŠ¸ 하거나 "
"insert í• ë•Œ ìžë™ì 으로 íšë“ëœë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>LockMode.UPGRADE can be acquired upon explicit user "
"request using <literal>SELECT ... FOR UPDATE on databases which "
"support that syntax."
msgstr ""
"<literal>LockMode.UPGRADE는 SELECT ... FOR UPDATESELECT ... FOR UPDATE can be acquired upon explicit "
"user request using a <literal>SELECT ... FOR UPDATE NOWAIT under "
"Oracle."
msgstr ""
"<literal>LockMode.UPGRADE_NOWAIT는 오ë¼í´ì—ì„œ SELECT ... "
"FOR UPDATE NOWAIT</literal>를 사용하여 명시ì ì¸ ì‚¬ìš©ìž ìš”ì² ìƒì—ì„œ 얻어질 수"
"ë„ ìžˆë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>LockMode.READ is acquired automatically when Hibernate "
"reads data under Repeatable Read or Serializable isolation level. It can be "
"re-acquired by explicit user request."
msgstr ""
"<literal>LockMode.READ는 Hibernateê°€ 반복 가능한 ì½ê¸°(Repeatable "
"Read) ë˜ëŠ” Serialization 격리 ë ˆë²¨ì—ì„œ ë°ì´í„°ë¥¼ ì½ì–´ë“¤ì¼ ë•Œ ìžë™ì 으로 얻어"
"질 ìˆ˜ë„ ìžˆë‹¤. 명시ì ì¸ ì‚¬ìš©ìž ìš”ì²ì— ì˜í•´ 다시 얻어질 ìˆ˜ë„ ìžˆë‹¤."
#. Tag: para
#, no-c-format
msgid ""
"<literal>LockMode.NONE represents the absence of a lock. All "
"objects switch to this lock mode at the end of a <literal>Transactionupdate()"
"</literal> or saveOrUpdate() also start out in this lock "
"mode."
msgstr ""
"<literal>LockMode.NONEì€ ìž ê¸ˆì´ ì—†ìŒì„ 나타낸다. ëª¨ë“ ê°ì²´ë“¤ì€ "
"<literal>Transactionì˜ ëì—ì„œ ì´ ìž ê¸ˆ 모드로 ì „í™˜ëœë‹¤. "
"<literal>update() ë˜ëŠ” saveOrUpdate()ì— ëŒ€í•œ 호"
"ì¶œì„ í†µí•´ 세션과 ì—°ê´€ëœ ê°ì²´ë“¤ì´ ë˜í•œ ì´ ìž ê¸ˆ 모드로 시작ëœë‹¤."
#. Tag: para
#, no-c-format
msgid ""
"The \"explicit user request\" is expressed in one of the following ways:"
msgstr "\"명시ì ì¸ ì‚¬ìš©ìž ìš”ì²\"ì€ ë‹¤ìŒ ë°©ë²•ë“¤ 중 하나로 표현ëœë‹¤:"
#. Tag: para
#, no-c-format
msgid ""
"A call to <literal>Session.load(), specifying a LockMode를 ì§€ì •í•œ Session.load()ì— ëŒ€"
"한 호출."
#. Tag: para
#, no-c-format
msgid "A call to <literal>Session.lock()."
msgstr "<literal>Session.lock()ì— ëŒ€í•œ 호출."
#. Tag: para
#, no-c-format
msgid "A call to <literal>Query.setLockMode()."
msgstr "<literal>Query.setLockMode()ì— ëŒ€í•œ 호출."
#. Tag: para
#, no-c-format
msgid ""
"If <literal>Session.load() is called with UPGRADEUPGRADE_NOWAIT, and the requested object was "
"not yet loaded by the session, the object is loaded using "
"<literal>SELECT ... FOR UPDATE. If load() is "
"called for an object that is already loaded with a less restrictive lock "
"than the one requested, Hibernate calls <literal>lock() for that "
"object."
msgstr ""
"ë§Œì¼ <literal>Session.load()ê°€ UPGRADE ë˜ëŠ” "
"<literal>UPGRADE_NOWAIT 모드로 호출ë˜ê³ ,ìš”ì²ëœ ê°ì²´ê°€ ì•„ì§ ì´ ì„¸ì…˜"
"ì— ì˜í•´ 로드ë˜ì§€ 않았다면, ê·¸ ê°ì²´ëŠ” <literal>SELECT ... FOR UPDATE"
"를 사용하여 로드ëœë‹¤. ë§Œì¼ ìš”ì²ëœ ê²ƒì´ ì•„ë‹Œ 다소 ì œí•œì ì¸ ìž ê¸ˆìœ¼ë¡œ ì´ë¯¸ 로드"
"ë˜ì–´ 있는 ê°ì²´ì— 대해 <literal>load()ê°€ 호출ë 경우, Hibernate는 "
"ê·¸ ê°ì²´ì— 대해 <literal>lock()ì„ í˜¸ì¶œí•œë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>Session.lock() performs a version number check if the "
"specified lock mode is <literal>READ, UPGRADE "
"or <literal>UPGRADE_NOWAIT. In the case of UPGRADEUPGRADE_NOWAIT, SELECT ... FOR "
"UPDATE</literal> is used."
msgstr ""
"ë§Œì¼ ì§€ì •ëœ ìž ê¸ˆ 모드가 <literal>READ, UPGRADE "
"ë˜ëŠ” <literal>UPGRADE_NOWAIT ì¼ ê²½ìš°ì— Session.lock()UPGRADE ë˜ëŠ” "
"<literal>UPGRADE_NOWAIT ì¸ ê²½ìš°ì—, SELECT ... FOR UPDATE would obtain a connection when it was first "
"required and then maintain that connection until the session was closed. "
"Hibernate 3.x introduced the notion of connection release modes that would "
"instruct a session how to handle its JDBC connections. The following "
"discussion is pertinent only to connections provided through a configured "
"<literal>ConnectionProvider. User-supplied connections are outside "
"the breadth of this discussion. The different release modes are identified "
"by the enumerated values of <literal>org.hibernate.ConnectionReleaseModeì´ í•˜ë‚˜ì˜ ì»¤ë„¥ì…˜ì„ íšë“í• ê²ƒì´"
"ê³ , 그런 ë‹¤ìŒ ê·¸ ì»¤ë„¥ì…˜ì€ ê·¸ ì„¸ì…˜ì´ ë‹«í˜€ì§ˆë•Œê¹Œì§€ ë³´ê´€ëœë‹¤ëŠ” 것ì´ì—ˆë‹¤. "
"Hibernate 3.x는 세션ì—게 ê·¸ê²ƒì˜ JDBC ì»¤ë„¥ì…˜ë“¤ì„ ì²˜ë¦¬í•˜ëŠ” ë°©ë²•ì„ ì•Œë ¤ì£¼ê¸° 위"
"í•´ ì—°ê²° í•´ì œ ëª¨ë“œë“¤ì— ê´€í•œ ê°œë…ì„ ë„입했다. ë‹¤ìŒ ë…¼ì˜ëŠ” êµ¬ì„±ëœ "
"<literal>ConnectionProvider를 통해 ì œê³µë˜ëŠ” ì»¤ë„¥ì…˜ë“¤ì— ëŒ€í•´ì„œë§Œ ì "
"ì ˆí•˜ë‹¤ëŠ” ì ì„ ë…¸íŠ¸í•˜ë¼; 사용ìžê°€ ì œê³µí•˜ëŠ” ì»¤ë„¥ì…˜ë“¤ì€ <literal>org.hibernate."
"ConnectionReleaseMode</literal>ì˜ ì—´ê±°ëœ ê°’ë“¤ì— ì˜í•´ ì‹ë³„ëœë‹¤:"
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>ON_CLOSE: is the legacy behavior described above. The "
"Hibernate session obtains a connection when it first needs to perform some "
"JDBC access and maintains that connection until the session is closed."
msgstr ""
"<literal>ON_CLOSE - 는 본질ì 으로 ìœ„ì— ì„¤ëª…ëœ ë¦¬ê±°ì‹œ 특징ì´ë‹¤. "
"Hibernate ì„¸ì…˜ì€ ê·¸ê²ƒì´ ì–´ë–¤ JDBC ì ‘ê·¼ì„ ìˆ˜í–‰í•˜ê³ ì„¸ì…˜ì´ ë‹«í˜€ì§ˆ 때까지 ê·¸ 커"
"ë„¥ì…˜ì„ ë³´ê´€í• í•„ìš”ê°€ ìžˆì„ ë•Œ í•˜ë‚˜ì˜ ì»¤ë„¥ì…˜ì„ íšë“한다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>AFTER_TRANSACTION: releases connections after a "
"<literal>org.hibernate.Transaction has been completed."
msgstr ""
"<literal>AFTER_TRANSACTION - ì€ í•˜ë‚˜ì˜ org.hibernate."
"Transaction</literal>ì´ ì™„ë£Œëœ í›„ì— ì—°ê²°ë“¤ì„ í•´ì œí•˜ë¼ê³ ë§í•œë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>AFTER_STATEMENT (also referred to as aggressive release): "
"releases connections after every statement execution. This aggressive "
"releasing is skipped if that statement leaves open resources associated with "
"the given session. Currently the only situation where this occurs is through "
"the use of <literal>org.hibernate.ScrollableResults."
msgstr ""
"<literal>AFTER_STATEMENT (ë˜í•œ ì ê·¹ì ì¸ í•´ì œë¼ê³ 언급ë¨) - 는 ê°ê°"
"ì˜ ëª¨ë“ ë¬¸ìž¥ 실행 í›„ì— ì»¤ë„¥ì…˜ë“¤ì„ í•´ì œí•˜ë¼ê³ ë§í•œë‹¤. ì´ ì ê·¹ì ì¸ í•´ì œëŠ” ê·¸ 문"
"ìž¥ì´ ì£¼ì–´ì§„ 세션과 ì—°ê´€ëœ ë¦¬ì†ŒìŠ¤ë“¤ì„ ì—´ë ¤ì§„ì±„ë¡œ 남겨둘 경우ì—는 건너뛰게"
"(skip) ëœë‹¤; 현재 ì´ê²ƒì´ ì¼ì–´ë‚˜ëŠ” ìœ ì¼í•œ ìƒí™©ì€ <literal>org.hibernate."
"ScrollableResults</literal>ì˜ ì‚¬ìš©ì„ í†µí•´ì„œì´ë‹¤."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"The configuration parameter <literal>hibernate.connection.release_mode (the default): this choice delegates to the release "
"mode returned by the <literal>org.hibernate.transaction.TransactionFactory."
"getDefaultReleaseMode()</literal> method. For JTATransactionFactory, this "
"returns ConnectionReleaseMode.AFTER_STATEMENT; for JDBCTransactionFactory, "
"this returns ConnectionReleaseMode.AFTER_TRANSACTION. Do not change this "
"default behavior as failures due to the value of this setting tend to "
"indicate bugs and/or invalid assumptions in user code."
msgstr ""
"<literal>auto (ë””í´íŠ¸) - ì´ ì„ íƒì€ org.hibernate."
"transaction.TransactionFactory.getDefaultReleaseMode()</literal> ë©”ì†Œë“œì— ì˜"
"í•´ ë°˜í™˜ëœ í•´ì œ 모드로 위임시킨다. JTATransactionFactoryì¸ ê²½ìš°, ì´ê²ƒì€ "
"ConnectionReleaseMode.AFTER_STATEMENT를 반환한다; JDBCTransactionFactoryì¸ ê²½"
"ìš°, ì´ê²ƒì€ ConnectionReleaseMode.AFTER_TRANSACTIONì„ ë°˜í™˜í•œë‹¤. ì´ ì„¤ì •ì˜ ê°’"
"ì´ ì‚¬ìš©ìž ì½”ë“œ ë‚´ì˜ ë²„ê·¸ë“¤ ê·¸ë¦¬ê³ /ë˜ëŠ” ìœ íš¨í•˜ì§€ ì•Šì€ ê°€ì •ë“¤ì„ ê°€ë¦¬í‚¤ëŠ” 경향"
"ì´ ìžˆìŒìœ¼ë¡œ ì¸í•´ ì´ ë””í´íŠ¸ íŠ¹ì§•ì„ ì‹¤íŒ¨ë¡œ 변경하는 ê²ƒì€ ê±°ì˜ ì¢‹ì€ ìƒê°ì´ 아니"
"다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>on_close: uses ConnectionReleaseMode.ON_CLOSE. This "
"setting is left for backwards compatibility, but its use is discouraged."
msgstr ""
"<literal>on_close - 는 ConnectionReleaseMode.ON_CLOSE를 사용하ë¼ê³ "
"ë§í•œë‹¤. ì´ ì„¤ì •ì€ ì—í˜¸í™˜ì„±ì„ ìœ„í•´ 남겨졌지만, ê·¸ê²ƒì˜ ì‚¬ìš©ì€ ë§¤ìš° 권장ë˜ì§€ ì•Š"
"는다."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>after_transaction: uses ConnectionReleaseMode."
"AFTER_TRANSACTION. This setting should not be used in JTA environments. Also "
"note that with ConnectionReleaseMode.AFTER_TRANSACTION, if a session is "
"considered to be in auto-commit mode, connections will be released as if the "
"release mode were AFTER_STATEMENT."
msgstr ""
"<literal>after_transaction - ì€ ConnectionReleaseMode."
"AFTER_TRANSACTIONì„ ì‚¬ìš©í•˜ë¼ê³ ë§í•œë‹¤. ì´ ì„¤ì •ì€ JTA 환경들ì—ì„œ 사용ë˜ì§€ ì•Š"
"ì„ ê²ƒì´ë‹¤. ë˜í•œ ConnectionReleaseMode.AFTER_TRANSACTIONì¸ ê²½ìš°ì— ë§Œì¼ ì„¸ì…˜ì´ "
"auto-commit ëª¨ë“œì— ìžˆë„ë¡ ê³ ë ¤ë 경우, ì»¤ë„¥ì…˜ë“¤ì€ ë§ˆì¹˜ í•´ì œ 모드가 "
"AFTER_STATEMENTì¸ ê²ƒì²˜ëŸ¼ í•´ì œë ê²ƒìž„ì„ ë˜í•œ 노트하ë¼."
#. Tag: para
#, fuzzy, no-c-format
msgid ""
"<literal>after_statement: uses ConnectionReleaseMode."
"AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider). If not, the release mode "
"is reset to ConnectionReleaseMode.AFTER_TRANSACTION. This setting is only "
"safe in environments where we can either re-acquire the same underlying JDBC "
"connection each time you make a call into <literal>ConnectionProvider."
"getConnection()</literal> or in auto-commit environments where it does not "
"matter if we re-establish the same connection."
msgstr ""
"<literal>after_statement - 는 ConnectionReleaseMode.AFTER_STATEMENT"
"를 사용하ë¼ê³ ë§í•œë‹¤. 추가ì 으로 êµ¬ì„±ëœ <literal>ConnectionProvider"
"는 ê·¸ê²ƒì´ ì´ ì„¤ì • (<literal>supportsAggressiveRelease())ì„ ì§€ì›í•˜ëŠ”"
"지 여부를 알기 위해 ì°¸ê³ ëœë‹¤. ë§Œì¼ ì§€ì›í•˜ì§€ ì•Šì„ ê²½ìš°, í•´ì œ 모드는 "
"ConnectionReleaseMode.AFTER_TRANSACTION으로 ìž¬ì„¤ì •ëœë‹¤. ì´ ì„¤ì •ì€ ìš°ë¦¬ê°€ "
"<literal>ConnectionProvider.getConnection()ì„ í˜¸ì¶œí• ë•Œë§ˆë‹¤ 우리가 "
"ë™ì¼í•œ 기본 JDBC ì»¤ë„¥ì…˜ì„ ë‹¤ì‹œ 필요로 í• ìˆ˜ 있는 환경들ì—ì„œ ë˜ëŠ” 우리가 ë™ì¼"
"í•œ ì»¤ë„¥ì…˜ì„ ì–»ëŠ” ê²ƒì— ìƒê´€ì—†ëŠ” auto-commit 환경ì—ì„œ ì˜¤ì§ ì•ˆì „í•˜ë‹¤."
#~ msgid "foo==bar"
#~ msgstr "foo==bar"
Other Hibernate examples (source code examples)
Here is a short list of links related to this Hibernate transactions.po source code file:
|